Giả sử trong ứng dụng web của bạn, bạn cần phải thực hiện một số cuộc gọi redis để hiển thị một trang, như, nhận được một loạt các băm người dùng. Để tăng tốc độ này, bạn có thể gói các lệnh redis của bạn trong phần MULTI/EXEC, do đó sử dụng pipelining để tránh phải thực hiện nhiều chuyến đi khứ hồi. Nhưng bạn cũng muốn phân tích dữ liệu của mình, bởi vì bạn có rất nhiều dữ liệu và/hoặc bạn muốn phân phối các bài viết. Sau đó pipelining sẽ không hoạt động, bởi vì các khóa khác nhau có khả năng sống trên các nút khác nhau, trừ khi bạn có ý tưởng rõ ràng về bố cục dữ liệu của ứng dụng và phân đoạn dựa trên vai trò thay vì sử dụng hàm băm. Vì vậy, các phương pháp hay nhất để phân đoạn dữ liệu trên các máy chủ khác nhau mà không ảnh hưởng đến hiệu suất quá nhiều do nhiều máy chủ được liên hệ để hoàn thành công việc "độc đáo về khái niệm" là gì? Tôi tin rằng câu trả lời phụ thuộc vào ứng dụng web đang phát triển, và cuối cùng tôi sẽ chạy một số thử nghiệm, nhưng sẽ rất hữu ích nếu biết người khác đã đối phó với sự cân bằng mà tôi đã đề cập đến như thế nào.redis sharding, pipelining và round-trips
Trả lời
MULTI/EXEC và pipelining là hai thứ khác nhau. Bạn có thể làm MULTI/EXEC mà không cần pipelining và ngược lại.
Nếu bạn muốn phân đoạn và đường ống cùng một lúc, bạn cần nhóm các hoạt động thành đường ống cho mỗi trường hợp Redis, sau đó sử dụng pipelining cho từng trường hợp.
Đây là một ví dụ đơn giản sử dụng Ruby: https://gist.github.com/2587593
Một cách để cải thiện hơn nữa hiệu suất là để parallelize lưu lượng trên các trường hợp Redis khi hoạt động đã được nhóm (tức là bạn nhóm các hoạt động, bạn gửi cho tất cả trường hợp song song, bạn chờ câu trả lời từ tất cả các trường hợp).
Điều này phức tạp hơn một chút, vì yêu cầu khách hàng không chặn không đồng bộ. Để đạt hiệu suất tối đa, C/C++ nên được sử dụng ở phía máy khách. Điều này có thể dễ dàng thực hiện bằng cách sử dụng hiredis + vòng lặp sự kiện mà bạn chọn.
- 1. DataTables, Ajax Pipelining
- 2. NHibernate với Sql Azure và Sharding
- 3. Cơ sở dữ liệu sharding và JPA
- 4. Pipelining trong node_redis là gì?
- 5. Tự động sharding postgresql?
- 6. Redis và Data Integrity
- 7. Node.js và Redis Auth
- 8. S3 có hỗ trợ HTTP pipelining không?
- 9. Sharding and Transactions với MySQL
- 10. Mongodb, sharding và nhiều cửa sổ dịch vụ
- 11. LuaSocket, Lua 5.2 và Redis
- 12. Redis và Node.js và Socket.io Câu hỏi
- 13. chiến lược sharding cơ sở dữ liệu
- 14. Sharding bởi ObjectID, nó là đúng cách?
- 15. Cơ sở dữ liệu sharding and Rails
- 16. Cassandra có hỗ trợ sharding không?
- 17. Sao chép lại và tái phân đoạn Redis (cụm) khác biệt
- 18. Tại sao du hoặc echo pipelining không hoạt động?
- 19. HTTP: mối quan hệ giữa pipelining, keep-alive và Server Sent Events là gì?
- 20. Nhập số lượng lớn vào Redis
- 21. Node Redis - SET với EX và NX?
- 22. Redis và giá trị truy vấn
- 23. Node.js, (Hi) Redis và lệnh đa
- 24. redis: đặt mật khẩu cho redis
- 25. SQLAlchemy, UUID, Sharding và AUTO_INCREMENT khóa chính ... làm cách nào để chúng hoạt động cùng nhau?
- 26. NewSQL so với tối ưu hóa/sharding truyền thống
- 27. MongoDB v/s Redis
- 28. Memcached, Redis, hoặc Couchbase
- 29. Redis, Mongo hoặc Hazelcast?
- 30. Xuất/nhập Redis DB
Cảm ơn một triệu vì thông tin chi tiết, đặc biệt là chút về việc song song lưu lượng truy cập! – idrarig