Xin chào, mình là Dũng, đến từ youngmonkeys.org, mình rất ngưỡng mộ khi thấy các bạn làm 1 project với độ khó cao thế này. Mình xin phép đưa ra 1 số đề xuất các bạn xem có nên cải tiến không nhé. (xin đừng tiêu cực về những đề xuất này nhé)
Về việc tổ chức project: mình nghĩa rằng phần core sẽ chỉ nên chứa các thành phần quản lý và xử lý dữ liệu ví dụ như: https://github.com/keva-dev/keva/tree/master/core/src/main/java/dev/keva/core/command/impl còn những phần liên quan đến socket server thì nên tổ chức thành 1 module riêng để gọi đến phần core này, để ai mạnh về data thì sẽ care phần core này, ai mạnh về phần socket thì sẽ care phần giao tiếp
Cần phải chia việc quản lý dữ liệu thành nhiều tầng, ví dụ tầng memory và tầng persistence nên tách riêng nhau để nâng cấp cho dễ, có vẻ như lớp OffHeapDatabaseImpl đã làm việc này rồi, tuy nhiên thấy chưa thực sự rõ ràng
Việc lock global này sẽ làm nghẽn cổ chai, nên mình nghĩ các bạn nên lock theo từng key kết hợp sử dụng partition map để giảm phạm vi lock lại, các bạn thử tham khảo lớp BytesMapPartitionImpl và lớp BytesMapImpl này xem sao.
Một trong những ngược điểm rất lớn của redis là nó lưu dữ liệu vào file riêng, hazelcast ra đời đã khắc phục được nhược điểm này bằng việc cho phép persistence dữ liệu vào database bất kỳ như mysql, mongo, các bạn có thể tham khảo hazelcast hoặc calabash xem sao nhé
Xin chào, mình là Dũng, đến từ youngmonkeys.org, mình rất ngưỡng mộ khi thấy các bạn làm 1 project với độ khó cao thế này. Mình xin phép đưa ra 1 số đề xuất các bạn xem có nên cải tiến không nhé. (xin đừng tiêu cực về những đề xuất này nhé)
OffHeapDatabaseImpl
đã làm việc này rồi, tuy nhiên thấy chưa thực sự rõ ràng