Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm thế nào để chèn hàng tỷ dữ liệu vào Redis một cách hiệu quả?

Một vài điểm liên quan đến câu hỏi và mã mẫu.

  1. Pipelining không phải là một viên đạn bạc - bạn cần hiểu chức năng của nó trước khi sử dụng. Những gì pipelining làm là hàng loạt một số hoạt động được gửi dưới dạng hàng loạt, cũng như phản hồi của chúng từ máy chủ. Những gì bạn đạt được là thời gian vòng quanh mạng cho mỗi hoạt động được thay thế bằng thời gian của lô. Nhưng các lô có kích thước vô hạn là một nguồn tài nguyên thực sự tiêu hao - bạn cần giữ kích thước của chúng đủ nhỏ để có hiệu quả. Theo nguyên tắc chung, tôi thường cố gắng nhắm đến 60KB cho mỗi đường ống và vì mọi dữ liệu đều khác nhau, nên số lượng hoạt động thực tế trong một đường ống cũng vậy. Giả sử rằng khóa của bạn và giá trị của nó là ~ 1KB, bạn cần gọi pipeline.execute() cứ sau 60 hoạt động hoặc lâu hơn.

  2. Trừ khi tôi hoàn toàn hiểu nhầm, mã này sẽ không chạy. Bạn đang sử dụng HMSET như thể nó là SET , vì vậy về cơ bản bạn đang thiếu trường-> ánh xạ giá trị của Hashes. Hashs (HMSET ) và Chuỗi (SET ) là các kiểu dữ liệu khác nhau và do đó nên được sử dụng cho phù hợp.

  3. Có vẻ như một vòng lặp nhỏ này phụ trách toàn bộ "Tỷ dữ liệu" - nếu đúng như vậy, không chỉ máy chủ của bạn đang chạy mã sẽ bị hoán đổi như điên trừ khi nó có nhiều RAM để chứa từ điển, nó cũng sẽ rất kém hiệu quả (bất kể tốc độ của Python). Bạn cần song song việc chèn dữ liệu bằng cách chạy nhiều phiên bản của quy trình này.

  4. Bạn có đang kết nối với Redis từ xa không? Nếu vậy, mạng có thể đang hạn chế hiệu suất của bạn.

  5. Xem xét cài đặt Redis của bạn - có lẽ chúng có thể được tinh chỉnh / điều chỉnh để có hiệu suất tốt hơn cho tác vụ này, giả sử rằng nó thực sự là một nút cổ chai.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tạo hình ảnh docker từ kho lưu trữ github

  2. Tại sao hiệu suất của Redis SET tốt hơn GET?

  3. Làm cách nào để kiểm tra xem redis có đang chạy hay không trước khi tôi khởi động bình (và khởi động nếu không)?

  4. Làm cách nào để lưu trữ trong tập hợp được sắp xếp của Redis với dấu thời gian phía máy chủ dưới dạng điểm số?

  5. cách lưu trữ hình ảnh vào redis bằng python / PIL