keva-dev / keva

Low-latency in-memory key-value store, Redis drop-in alternative
https://keva.dev
Apache License 2.0
99 stars 13 forks source link

Đề xuất một số cải tiến #109

Open tvd12 opened 2 years ago

tvd12 commented 2 years ago

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é)

  1. 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
  2. Những cái kiểu thế này nên cho vào file, vừa dễ đọc mà đỡ làm dài code: https://github.com/keva-dev/keva/blob/master/core/src/main/java/dev/keva/core/server/KevaServer.java#L28
  3. 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
  4. 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.
  5. 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é
tuhuynh27 commented 2 years ago

Cảm ơn bạn @tvd12 đã đề xuất 🎉