Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bagaimana cara memasukkan Miliar data ke Redis secara efisien?

Beberapa poin tentang pertanyaan dan kode contoh.

  1. Pipelining bukanlah hal yang mudah - Anda perlu memahami fungsinya sebelum menggunakannya. Apa yang dilakukan pipelining adalah mengelompokkan beberapa operasi yang dikirim sebagai massal, seperti tanggapan mereka dari server. Apa yang Anda dapatkan adalah bahwa waktu perjalanan pulang pergi jaringan untuk setiap operasi diganti dengan waktu perjalanan batch. Tetapi batch berukuran tak terbatas benar-benar menguras sumber daya - Anda harus menjaga ukurannya cukup kecil agar efektif. Sebagai aturan praktis saya biasanya mencoba untuk mencapai 60KB per pipa dan karena setiap data berbeda, begitu juga jumlah operasi aktual dalam pipa. Dengan asumsi bahwa kunci Anda dan nilainya ~1KB, Anda perlu memanggil pipeline.execute() setiap 60 operasi atau lebih.

  2. Kecuali saya terlalu salah paham, kode ini tidak boleh dijalankan. Anda menggunakan HMSET seolah-olah itu SET , jadi pada dasarnya Anda melewatkan pemetaan bidang->nilai Hash. Hash (HMSET ) dan String (SET ) adalah tipe data yang berbeda dan oleh karena itu harus digunakan sebagaimana mestinya.

  3. Tampaknya satu putaran kecil ini bertanggung jawab atas seluruh "Miliar data" - jika demikian, server Anda yang menjalankan kode tidak hanya akan bertukar seperti orang gila kecuali jika memiliki banyak RAM untuk menampung kamus, itu juga akan sangat tidak efektif (terlepas dari kecepatan Python). Anda perlu memparalelkan penyisipan data dengan menjalankan beberapa contoh proses ini.

  4. Apakah Anda terhubung ke Redis dari jarak jauh? Jika demikian, jaringan mungkin membatasi kinerja Anda.

  5. Pertimbangkan pengaturan Redis Anda - mungkin ini dapat diubah/disetel untuk kinerja yang lebih baik untuk tugas ini, dengan asumsi bahwa itu memang sebuah hambatan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah memcached dinosaurus dibandingkan dengan Redis?

  2. node redis, variabel dibagikan di antara klien?

  3. Redis cluster/penyeimbangan beban

  4. Apakah pembaruan Redis sinkron?

  5. Redis INCRBY dengan batas