Saya sedang dalam proses merancang sistem baru untuk set data geospasial besar yang akan membutuhkan kinerja permintaan baca cepat. Oleh karena itu saya ingin melihat apakah ada yang berpikir itu mungkin atau memiliki pengalaman / saran tentang DBMS, struktur data, atau metode alternatif yang sesuai untuk mencapai kinerja yang diperlukan dalam situasi berikut:
Data akan terus diproduksi dari data radar satelit yang diproses, yang akan memiliki jangkauan global. Berdasarkan resolusi satelit dan jangkauan lahan dunia, saya memperkirakan set data lengkap untuk menghasilkan nilai di 75 miliar lokasi berbeda di dunia. Selama masa hidup satu satelit, output akan menghasilkan hingga 300 nilai di setiap lokasi ini (sehingga total kumpulan data> 22 triliun nilai). Ini untuk satu satelit, dan sudah ada yang kedua di orbit, dengan dua yang lain direncanakan dalam beberapa tahun baru. Jadi akan ada banyak data! Item data tunggal sangat sederhana dan hanya akan terdiri dari (bujur, lintang, nilai), tetapi karena jumlah item saya memperkirakan satu satelit untuk menghasilkan hingga 100TB.
Data tertulis seharusnya tidak perlu diperbarui, karena hanya akan tumbuh ketika akuisisi satelit baru diproses. Kinerja menulis tidak penting, tetapi kinerja membaca sangat penting. Tujuan dari proyek ini adalah untuk dapat memvisualisasikan data melalui antarmuka sederhana seperti layer over google maps, di mana setiap titik memiliki nilai berwarna berdasarkan rata-rata, gradien, atau beberapa fungsi dari waktu ke waktu. (demo di akhir posting).
Dari persyaratan ini, basis data harus dapat diukur dan kami cenderung melihat ke arah solusi cloud. Sistem harus mampu menangani pertanyaan geospasial seperti "titik dekat (lat, lon)" dan "titik dalam (kotak)", dan telah membaca kinerja <1s untuk menemukan satu titik, dan poligon yang berisi hingga 50.000 poin (meskipun lebih dari 200.000 poin lebih disukai).
Sejauh ini saya memiliki set data uji ~ 750 juta item data di 111 juta lokasi. Saya telah menguji coba contoh postgres / postGIS, yang berfungsi dengan baik, tetapi tanpa kemungkinan sharding saya tidak melakukan ini, ini akan dapat mengatasi data yang bertambah. Saya juga telah mencoba contoh mongoDB, yang lagi-lagi tampak OK jadi jauh, dan dengan sharding mungkin cukup untuk skala dengan volume data. Saya baru-baru ini belajar sedikit tentang elasticsearch, jadi setiap komentar tentang ini akan membantu karena ini baru bagi saya.
Berikut adalah animasi singkat tentang apa yang ingin kami capai dengan kumpulan data lengkap:
Gif ini (dari percobaan postgres saya) adalah melayani (6x3) ubin raster yang sudah dihitung sebelumnya, masing-masing berisi ~ 200.000 poin dan mengambil ~ 17 untuk menghasilkan masing-masing. Dengan mengklik suatu titik, grafik dibuat dengan menarik semua nilai historis di lokasi terdekat dalam <1s.
Permintaan maaf untuk posting lama, semua komentar / saran dipersilakan.
Seberapa up-do-date permintaan kueri Anda perlu?
Anda dapat mempartisi basis data berdasarkan waktu jika peta hanya perlu menunjukkan pengukuran terbaru. Ini akan mengurangi beban permintaan Anda untuk peta.
Untuk sejarah titik tertentu, Anda bisa menyimpan toko kedua x dan y yang menunjukkan riwayat. Ini bisa dilakukan dengan pembaruan / pembaruan setiap malam karena data historis tidak akan berubah.
Kemudian Anda dapat melakukan pre-komputasi rata-rata pada resolusi yang lebih kasar untuk diintegrasikan dengan peta pada tingkat zoom yang berbeda. Ini akan mengurangi jumlah titik yang akan diambil untuk area peta besar (perkecil). Resolusi yang lebih baik akan digunakan untuk memperbesar peta yang meminta area yang lebih kecil. Jika Anda benar-benar perlu mempercepat ini, Anda bisa menghitung ubin sebagai gumpalan dan menafsirkannya dalam aplikasi Anda.
Karena ini akan melibatkan beberapa komputasi ulang informasi agregat akan ada beberapa latensi dalam hasil permintaan. Bergantung pada seberapa jauh latensi dapat diterima, Anda dapat menggunakan pendekatan semacam ini untuk mengoptimalkan bacaan Anda.
OK, jadi poin Anda perlu dihitung rata-rata dari waktu ke waktu. Dengan perhitungan ini, saya kira permintaan aktual Anda turun cukup banyak dari 22 triliun item karena nilai raster dapat dihitung sebelumnya untuk kueri.
sumber
Kedengarannya seperti ada dua kelas kueri - satu untuk memahami lokasi mana yang terletak dalam jendela tampilan saat ini dan yang kedua untuk memberikan statistik yang diinginkan untuk titik-titik tersebut. Saran saya adalah menggunakan alat khusus yang terpisah untuk masing-masing.
Saya mengasumsikan semua pengukuran berhubungan dengan set poin 75Bn yang sama. Karenanya, lat / long ini, sekali didirikan, bersifat statis. Mereka dapat dikelompokkan, dikumpulkan dan diindeks dengan biaya satu kali. Karena itu saya akan menyarankan sharding berdasarkan wilayah dan tingkat zoom. Ukuran setiap beling akan didorong oleh kinerja yang dapat dicapai dari setiap instance GIS.
GIS akan mengembalikan satu set poin yang dilewatkan ke basis data deret waktu. Ini memegang nilai yang diukur dan melakukan agregat. KDB adalah salah satu yang saya ketahui. Ini menargetkan perdagangan sekuritas, yang akan memiliki kunci lebih sedikit tetapi lebih banyak poin data per kunci dari skenario Anda.
Akan ada biaya untuk mentransfer nilai-nilai utama dari server GIS ke DB timeseries. Hipotesis saya adalah bahwa biaya ini akan dibayar kembali oleh pemrosesan yang lebih cepat dalam DB deret waktu tugas khusus. Dari kata-kata dalam pertanyaan, tampaknya satu instance tidak akan dapat menyimpan semua data sehingga beberapa lalu lintas lintas-server tampaknya tidak terhindarkan. Mengingat kecepatan relatif dari komponen-komponen itu, sepertinya mengirimkan keyet ke server jauh yang memiliki data yang di-cache akan lebih cepat daripada membaca data dari disk lokal.
Jika bagian-bagian pencarian-titik dan penghitungan nilai bisa bersifat lokal satu sama lain maka tentu saja saya berharap responsnya menjadi lebih cepat. Pemahaman saya (terbatas) adalah bahwa menemukan tetangga terdekat N ke titik tertentu adalah tugas yang tidak sepele. Inilah sebabnya saya menyarankan untuk menggunakan perangkat lunak tertentu untuk melakukannya. Jika titik-temuan dapat dikurangi menjadi
maka bagian itu dapat ditangani oleh perangkat lunak penyimpanan nilai dan GIS dihilangkan dari arsitektur.
Saya belum menerapkan sistem seperti itu. Aku benar-benar hanya berpikir keras di sini. Pada skala petabyte tidak ada solusi yang tersedia. Namun, ada banyak penyedia data satelit sehingga masalah Anda mudah ditangani. Semoga berhasil.
sumber