"Sekarang - bagaimana Anda akan mengatasi masalah yang dijelaskan?"
Dengan file datar sederhana.
Inilah alasannya
Anda memiliki 2.000.000 entitas. Partisi berdasarkan nomor entitas:
level1= entity/10000
level2= (entity/100)%100
level3= entity%100
Setiap file data adalah level1/level2/level3/batch_of_data
Anda kemudian dapat membaca semua file di bagian direktori tertentu untuk mengembalikan sampel untuk diproses.
Jika seseorang menginginkan database relasional, maka muat file untuk entity_id tertentu ke dalam database untuk digunakan.
Sunting Pada nomor hari.
-
date_id
/entity_id
aturan keunikan tidak sesuatu yang harus ditangani. Ini (a) secara sepele dikenakan pada nama file dan (b) tidak relevan untuk kueri. -
date_id
"rollover" tidak berarti apa-apa -- tidak ada kueri, jadi tidak perlu mengganti nama apa pun.date_id
hanya harus tumbuh tanpa terikat dari tanggal zaman. Jika Anda ingin menghapus data lama, hapus file lama.
Karena tidak ada kueri yang bergantung pada date_id
, tidak ada yang perlu dilakukan dengan itu. Itu bisa menjadi nama file untuk semua yang penting.
Untuk memasukkan date_id
di kumpulan hasil, tuliskan dalam file dengan empat atribut lainnya yang ada di setiap baris file.
Sunting saat buka/tutup
Untuk menulis, Anda harus membiarkan file terbuka. Anda melakukan flushes (atau menutup/membuka kembali) secara berkala untuk memastikan bahwa hal-hal tersebut benar-benar masuk ke disk.
Anda memiliki dua pilihan untuk arsitektur penulis Anda.
-
Memiliki proses "penulis" tunggal yang menggabungkan data dari berbagai sumber. Ini berguna jika kueri relatif sering. Anda membayar untuk menggabungkan data pada waktu penulisan.
-
Buka beberapa file secara bersamaan untuk ditulis. Saat membuat kueri, gabungkan file-file ini menjadi satu hasil. Ini berguna karena kueri relatif jarang. Anda membayar untuk menggabungkan data pada waktu kueri.