PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menangani paging dengan mengubah urutan sortir

Ini adalah masalah tanpa solusi yang memuaskan karena Anda mencoba menggabungkan persyaratan yang pada dasarnya tidak kompatibel:

  • Kirimkan hanya jumlah data yang diperlukan ke klien sesuai permintaan, yaitu Anda tidak dapat mengunduh seluruh kumpulan data, lalu memberi nomor halaman pada sisi klien.

  • Minimalkan jumlah status per klien yang harus dilacak oleh server, untuk skalabilitas dengan klien dalam jumlah besar.

  • Pertahankan status yang berbeda untuk setiap klien

Ini adalah jenis situasi "pilih dua". Anda harus berkompromi; menerima bahwa Anda tidak dapat mempertahankan status pagination setiap klien dengan tepat, menerima bahwa Anda harus mengunduh kumpulan data besar ke klien, atau menerima bahwa Anda harus menggunakan sejumlah besar sumber daya server untuk mempertahankan status klien.

Ada variasi di dalamnya yang menggabungkan berbagai kompromi, tapi itulah intinya.

Misalnya, beberapa orang akan mengirim klien beberapa data tambahan, cukup untuk memenuhi sebagian besar kebutuhan klien. Jika klien melebihi itu, maka pagination akan rusak.

Beberapa sistem akan men-cache status klien untuk waktu yang singkat (dengan tabel yang tidak masuk log berumur pendek, file temp, atau apa pun), tetapi kedaluwarsa dengan cepat, jadi jika klien tidak terus-menerus meminta data baru, pagination akan rusak.

dll.

Lihat juga:

Saya mungkin akan menerapkan solusi hibrida dalam beberapa bentuk, seperti:

  • Menggunakan kursor, baca dan segera kirim bagian pertama data ke klien.

  • Segera ambil data ekstra yang cukup dari kursor untuk memenuhi 99% kebutuhan klien. Simpan ke cache yang cepat dan tidak aman seperti memcached, Redis, BigMemory, EHCache, apa pun di bawah kunci yang memungkinkan saya mengambilnya untuk permintaan selanjutnya oleh klien yang sama. Kemudian tutup kursor untuk mengosongkan sumber daya DB.

  • Kedaluwarsa cache pada basis yang paling jarang digunakan, jadi jika klien tidak terus membaca dengan cukup cepat, mereka harus mendapatkan set data baru dari DB, dan pagination akan berubah.

  • Jika klien menginginkan lebih banyak hasil daripada sebagian besar rekan-rekannya, pagination akan berubah di beberapa titik saat Anda beralih ke pembacaan langsung dari DB daripada cache atau menghasilkan kumpulan data cache baru yang lebih besar.

Dengan begitu sebagian besar klien tidak akan melihat masalah pagination dan Anda tidak perlu mengirim data dalam jumlah besar ke sebagian besar klien, tetapi Anda tidak akan melelehkan server DB Anda. Namun, Anda memerlukan cache boofy besar untuk lolos dari ini. Kepraktisannya tergantung pada apakah klien Anda dapat mengatasi pemecahan pagination - jika tidak dapat diterima untuk memecah pagination, maka Anda terjebak dengan melakukannya di sisi DB dengan kursor, tabel temp, mengatasi seluruh hasil yang ditetapkan pada permintaan pertama, dll. Itu juga tergantung pada ukuran kumpulan data dan berapa banyak data yang biasanya dibutuhkan setiap klien.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menemukan kombinasi nilai-nilai tertentu

  2. MAX() Fungsi di PostgreSQL

  3. Rails 3.2 - metode tidak terdefinisi `where' untuk #<Array:... - Query dari Model.where()

  4. Bagaimana cara menyisipkan file .png atau .jpeg secara manual ke dalam kolom byte di PostgreSQL?

  5. SQL:Temukan string umum terpanjang di antara baris