Hai Saya seorang insinyur sipil dengan beberapa pengalaman pemrograman tetapi saya tidak terbiasa dengan berbagai pilihan yang tersedia saat ini. Semoga Anda bisa memberi saya petunjuk apa pun cara terbaik untuk melanjutkan.
Saya ingin membuat dan meminta basis data pengukuran survei permukaan tanah dalam format kisi. Akan ada banyak pengukuran untuk setiap lokasi kisi pada berbagai waktu melalui pekerjaan pemindahan bumi sehingga ada dimensi waktu ke-4.
Pengamatan kemungkinan besar akan dibaca dari file teks. Di setiap catatan akan ada posisi grid (2 x integer) (baris dan kolom) tingkat dasar (floating point) dan berbagai kode informasi string (mungkin total hingga 30 karakter).
Kisi-kisi bisa sekitar 10.000 baris x 10.000 kolom. Tidak setiap lokasi di grid akan memiliki catatan dalam setiap survei, tetapi mereka biasanya memiliki hingga seratus catatan. Banyak lokasi kisi tidak memiliki catatan sama sekali (situs tidak akan berbentuk persegi panjang sempurna).
Saya ingin mencari catatan, mengekstrak data, dan melakukan perhitungan, misalnya, menghitung permukaan tanah terendah atau tertinggi untuk setiap lokasi kisi. Saya cukup yakin saya akan memiliki kemampuan untuk memprogram ini cukup sederhana dalam bahasa seperti FORTRAN, BASIC atau C menggunakan array. Banyak elemen array akan kosong dan saya kira ini bukan cara yang tepat untuk melakukannya dan database besar seperti ini memerlukan alat khusus yang harus saya pelajari cara menggunakannya.
Saya memikirkan opsi yang mungkin untuk platform -
Gunakan program basis data. Saya tidak terbiasa dengan seberapa kuat ini tetapi saya membayangkan mereka akan memiliki banyak overhead dengan GUI.
Gunakan SQL? Ini saya tidak tahu banyak tentang tetapi tampaknya menjadi bahasa untuk database. Saya selalu menggunakan bahasa imperatif daripada deklaratif dan seperti yang saya mengerti dari wikipedia bahwa SQL adalah deklaratif, saya agak gugup dengan perubahan itu. Saya tidak sepenuhnya mengerti proses menggunakannya. Apakah ada kompiler yang membuat program konsol? Apakah database disimpan di disk? Maaf untuk pertanyaan bodoh seperti itu.
Gunakan API seperti c-treeACE? Saya pikir ini mungkin cara untuk menawarkan saya keakraban dengan bahasa "lakukan ini, lalu lakukan itu" (sayangnya ini adalah cara saya berpikir sebagai seorang insinyur!). Tapi saya berharap memori di balik layar dan manajemen pemrosesan yang ditawarkan oleh API akan lebih unggul dari apa yang bisa saya capai dengan array besar.
Atau dapatkah saya melakukannya dengan bahasa berorientasi objek dan membiarkan komputer khawatir tentang persyaratan penyimpanan. mis. jika saya menyimpan catatan sebagai objek dengan metode dan properti yang akan membantu saya mendapatkan hasil yang saya butuhkan dari setiap catatan - apakah itu program yang sangat besar dibandingkan dengan 3)
Kemungkinan ada ratusan juta catatan dan saya ingin dapat meminta dan memprosesnya dalam hitungan menit, bukan jam (lebih baik detik!) Pada PC modern yang menjalankan windows. Yang lebih spesifik adalah prosesor i7 dengan ram 6Gb dan 120GB SSD yang menjalankan Windows 7 64 bit.
Semoga seseorang punya waktu untuk berbagi beberapa kata bijak dengan seorang pemula.
sumber
Jawaban:
Ada sejumlah opsi dan tolong jangan batasi jawaban saya di sini. Khususnya Anda mungkin menemukan database array-asli untuk membantu. Jawaban saya akan secara khusus tentang pertanyaan Anda tentang database berbasis SQL.
Kedengarannya bagi saya seperti ini adalah pertanyaan tentang informasi geospasial. Basis data berbasis SQL sebenarnya digunakan dalam bidang seperti itu dengan cukup baik, tetapi ini juga merupakan bidang spesialis dalam basis data.
Di antara database SQL di bidang ini, PostgreSQL, dengan add-on PostGIS dianggap salah satu yang terbaik. Jika saya jadi Anda, ini adalah tempat saya akan mulai. Keuntungan utama dari SQL adalah menjaga fleksibilitas saat menggunakan kembali data Anda untuk penggunaan yang belum Anda pikirkan. Melakukan hal ini dengan dukungan geospasial yang baik berarti Anda dapat menghitung jarak di area yang luas tanpa khawatir tentang spesifikasi dari spherical trig.
Tentu saja ini hanya menjadi faktor dengan grid yang sangat besar. Untuk kisi-kisi yang lebih kecil, di mana kelengkungan bumi dapat diabaikan, PostgreSQL juga memiliki berbagai jenis geometris termasuk titik-titik pada sistem koordinat yang dapat digunakan. Saya menyebutkan ini karena tidak jelas seberapa besar suatu daerah sedang disurvei dan apakah seseorang dapat mengasumsikan geometri bidang atau tidak.
Meski begitu PostGIS mungkin masih menyederhanakan hal-hal dengan memungkinkan representasi dan perhitungan pada sistem koordinat geometrik 3 dan 4 dimensi.
Perhatikan juga bahwa Anda mengatakan situs Anda tidak harus berbentuk persegi. Dalam PostgreSQL satu hal yang dapat Anda lakukan (baik menggunakan tipe geometris atau PostGIS) adalah menentukan batas non-persegi panjang untuk setiap situs sehingga Anda dapat memeriksa untuk memastikan titik di dalam batas situs sebelum menyimpan pengukuran.
Dampak Bahasa Deklaratif
Kekhawatiran ini saya pikir terlalu berlebihan. Orang-orang dapat dan memang menulis query SQL seolah-olah mereka adalah bagian dari bahasa program yang mereka panggil. Untuk sebagian besar pertanyaan Anda itu tidak masalah.
Apa yang orang maksudkan dengan bahasa deklaratif adalah bahwa di dalam sebuah query, struktur memberi tahu database informasi apa yang Anda inginkan, bukan bagaimana cara mendapatkannya. Ini penting ketika Anda menginginkan informasi yang kompleks dari database karena pada dasarnya itu berarti bahwa jika Anda dapat mengajukan pertanyaan yang tepat (dan data Anda valid), Anda akan mendapatkan jawaban yang benar.
Perbedaan besar yang terjadi adalah bahwa query SQL yang panjang lebih mudah untuk di-debug daripada subrutin imperatif yang panjang, hanya karena seseorang dapat lebih cepat mempersempit di mana dalam kueri kerusakan terjadi.
Bagaimana ini akan berhasil
Kemungkinannya adalah jika Anda memilih rute ini, Anda akan memiliki database dan program yang ditulis dalam bahasa pilihan Anda. Program akan mengirimkan pertanyaan ke database dan mendapatkan jawabannya kembali. Anda juga dapat (dalam PostgreSQL dan banyak DB relasional lainnya) memasukkan pertanyaan Anda ke dalam fungsi-fungsi yang kemudian dapat dipanggil oleh aplikasi, memberikan lebih banyak antarmuka imperatif atau fungsional. Data akan disimpan pada disk dan diakses dari perangkat lunak terpisah dari program Anda. Anda juga dapat terhubung dengan program lain (dari MS Access ke pgAdmin) dan menjalankan kueri atau menghasilkan laporan.
Intinya, Anda dapat menganggap RDBMS sebagai "mesin matematika" yang mengelola data Anda, dan program Anda berinteraksi dengannya untuk melakukan apa yang Anda butuhkan.
sumber