Menyimpan dan menanyakan data bergulir dalam PostgreSQL


12

Saya memiliki sejumlah besar data model cuaca yang dimasukkan ke dalam database PostgreSQL. Mesin ini memiliki 8 core dan 16 GB RAM. Saya menjalankan PostgreSQL 9.3 dengan PostGIS 2.1. Setiap tabel akan memiliki berbagai data cuaca (suhu, titik embun, angin, dll.). Setiap tabel akan memiliki 6-7 kolom: lintang, bujur, geometri titik, ketinggian, tanggal-waktu model yang relevan untuk, dan 1-2 nilai data yang menarik. Data terutama akan ditanyakan untuk kotak pembatas oleh waktu dan ketinggian. Akan ada sekitar 145.757.360 baris per tabel (data yang lebih tua dari sekarang tidak lagi relevan akan dihapus). Saya kira-kira memperkirakan ukuran tabel sekitar 10 GB masing-masing tanpa indeks. (Itu 52 byte data ditambah 23 byte overhead per baris). Data akan diperbarui secara berkala / dimasukkan saat data model baru tersedia. catatan:

Jadi saya melihat dua rencana ini:

  1. Cukup indeks dan cluster berdasarkan (datetime, elevasi) dengan indeks tambahan untuk geometri titik. Jalankan pekerjaan cron biasa yang menghapus baris lama, jalankan vakum / analisis, dan klaster ulang.
  2. Partisi berdasarkan datetime dan kemudian cluster dan indeks dengan ketinggian per tabel dengan indeks pada geometri. Jalankan pekerjaan cron reguler untuk menambahkan tabel baru ke depan dan menjatuhkan tabel lama.

Lebih lanjut,

  • Jadi, saya tahu bahwa menjatuhkan meja jauh lebih efisien dan menghapus dan menyedot debu. Tetapi apakah saya akan melihat peningkatan kinerja sebaliknya?
  • Apakah partisi sesuai ketika semua tabel akan diperbarui dan dipilih secara merata sampai dihapus sebagai tidak relevan (dokumentasi menunjukkan bahwa partisi bekerja paling baik ketika hanya sedikit dari mereka yang akan dipilih)?

Ketika mengirimkan data, apakah pilihan akan lebih cepat dari indeks yang dikelompokkan? Apakah jawabannya berubah jika beberapa permintaan dilakukan sekaligus?

Terima kasih. Saya harap saya memasang semua data yang dibutuhkan. Jika tidak beri tahu saya dan saya akan menambahkannya.


1
Aduh, baris-baris sempit ini adalah tempat header baris besar PostgreSQL mulai benar-benar sakit. Sayang sekali tidak banyak yang bisa dihilangkan; itu tidak seperti kita bisa kehilangan xminatau xmax, dll. Ada fitur yang mungkin membuatnya menjadi 9,4 yang mungkin akan membuat Anda bersemangat, yang disebut indeks minmax, yang akan membuat hal-hal seperti ini jauh lebih nyaman.
Craig Ringer

1
Merupakan kombinasi berulang berikut: "lintang, bujur, titik geometri, ketinggian". Jika ya, menormalkannya ke dalam tabel lain dapat menghemat ruang.
AK

Hanya sedikit. Geometri PostGIS adalah array biner dan tidak dapat dibaca manusia. Saya bisa mendapatkan nilai-nilai itu pada output, tapi kemudian saya tidak bisa mengelompokkannya. Saya bisa menggunakan GeoHash untuk mengelompok, tapi itu tidak lagi bisa dibaca daripada lat lat. Tapi bagaimanapun ruang bukan masalahnya. Mereka menawarkan terrabytes sebanyak yang saya bisa isi. Masalahnya adalah saya tidak bisa meminta terrabytes dengan cepat. Basis data itu sendiri sebagian besar akan non-transaksional. Hanya dua skrip yang akan memiliki akses tulis sama sekali. Yang lainnya hanya bisa dibaca.
bshender

Craig: Mereka memang tampak menarik. Saya menantikan untuk bereksperimen dengan mereka ketika mereka keluar. Adakah pemikiran tentang pengaturan saya di 9.3?
bshender

1
Bisakah Anda memberikan dua informasi, tolong: 1) Apa yang paling penting bagi Anda, masukkan kecepatan atau kecepatan permintaan? 2) Pertanyaan apa yang paling umum?
Thomas Kejser

Jawaban:


1

Semua hal dipertimbangkan, saya akan pergi dengan opsi 2. Tanggal akan dipilih secara merata, tetapi saya akan menebak bahwa untuk permintaan yang diberikan hanya satu atau dua partisi tanggal yang akan terlibat. Sayang sekali Anda tidak dapat mengelompokkan pada geolokasi dan partisi pada tanggal, yang akan ideal. Ketinggian cenderung berkorelasi dengan geolokasi, jika kotak pembatas cukup kecil.

Mengingat pilihan yang tersedia, operasi data yang lebih bersih dan menghindari kekosongan harian adalah hal yang baik untuk dimiliki.

Mengirimkan pilihan mungkin lebih cepat dengan opsi 1, meskipun saya curiga itu mungkin mencuci. Dengan opsi 1, catatan dengan tanggal dan ketinggian yang sama ditempatkan berdekatan satu sama lain dalam satu indeks cluster besar. Dengan opsi 2, catatan dengan tanggal dan ketinggian yang sama ditempatkan berdekatan satu sama lain dalam banyak indeks cluster yang lebih kecil.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.