2011-05-23 22 views
42

Leveldb dường như là một cửa hàng giá trị khóa liên tục thú vị mới từ Google. Leveldb khác với Redis hoặc Riak hoặc Tokyo Tyrant như thế nào? Trong trường hợp sử dụng cụ thể nào thì tốt hơn trường hợp khác?Làm thế nào để so sánh Leveldb với Redis hoặc Riak hoặc Tokyo Tyrant?

+0

Vui lòng xem [Hacker News thread] (http://news.ycombinator.com/item?id=2526032) để biết thêm thông tin. – rafidude

Trả lời

28

Tôi thấy tôi không đồng ý một chút với tiêu chí của colum mặc dù sự khác biệt giữa leveldb và Redis mà ông chỉ ra là điểm trên.

Bạn có cần đồng thời không? Tôi sẽ đi với Redis. Tôi nói điều này bởi vì Redis đã có mã được viết để xử lý nó. Bất cứ lúc nào tôi cũng có thể sử dụng Bộ luật Người khác được viết tốt để xử lý đồng thời, càng nhiều càng tốt. Tôi không chỉ đơn giản là các ứng dụng đa luồng, nhưng bao gồm trong khái niệm này về nhiều quy trình - có phải chúng trên cùng một hệ thống hay không. Thậm chí sau đó, không cần phải viết và gỡ lỗi khóa trong một ứng dụng đa luồng có một lợi thế lớn trong mắt tôi.

Bạn có muốn nó hoàn toàn độc lập trong ứng dụng không? Đi với leveldb vì nó là một thư viện. Bạn cần hoặc muốn nhiều hơn chỉ là một k/v? Đi với Redis.

Tôi chỉ nhận xét về khía cạnh leveldb hoặc Redis vì tôi không xem xét bản thân mình đủ thông thạo trong Riak hoặc TT để nhận xét về bộ đồ tốt hơn của họ.

Tóm lại nếu tất cả những gì bạn đang tìm kiếm là lưu trữ khóa-giá trị liên tục trong ứng dụng đơn luồng thì leveldb là tùy chọn để chọn trong danh sách của bạn (một nội dung khác là nội các Tokyo hoặc ole BerkleyDB hoặc thậm chí sqlite). Nhưng nếu bạn muốn nhiều hơn thế, hãy chọn một trong số những người khác.

[chỉnh sửa: wrt giải thích được cập nhật. đồng thời]

+3

Không chắc chắn nếu tôi đồng ý với phân tích của bạn. Vui lòng xem [Hacker News thread] (http://news.ycombinator.com/item?id=2526032). Cả về mặt đồng thời và tốc độ leveldb có vẻ cao hơn mặc dù tôi vẫn đang tìm kiếm các nghiên cứu khách quan. – rafidude

+1

Tôi đoán nó phụ thuộc vào * tại sao * bạn đang đi với đồng thời, và làm thế nào bạn cần nó. Tôi không biện hộ rằng Redis sẽ nhanh hơn với đồng thời mặc dù để được triệt để tôi đã không nói lý do tại sao (tôi sẽ sửa chữa điều đó). Nhưng từ quan điểm của "Tôi không phải viết mã để xử lý đồng thời", tôi xem đó là một yếu tố chính. –

+0

Wow, xuống phiếu w/o giải thích? –

11

Sự khác biệt:

  • Redis là một máy chủ, trong khi LevelDB là "thư viện mà thực hiện một cửa hàng quan trọng có giá trị dai dẳng nhanh". Do đó, với Redis, bạn phải thăm dò ý kiến ​​của máy chủ. Với Leveldb, cơ sở dữ liệu được lưu trữ trên đĩa, làm cho nó chậm hơn rất nhiều so với Redis, được lưu trữ trong bộ nhớ.
  • Leveldb chỉ cung cấp khóa/cửa hàng. Redis có này là tốt, nhưng cũng có rất nhiều chức năng và các tính năng

tương đồng:

  • Cả hai đều có Khóa/Store phương pháp

lý do để chọn một trong một số khác

Nếu bạn đang tạo ứng dụng C/C++, thì leveldb là cách để đi, được cung cấp bạn chỉ cần một cơ sở dữ liệu không phải là tài nguyên nặng như mysql. Leveldb cung cấp truy cập mức mã, trong khi với redis bạn cần một giao diện có giao tiếp với máy chủ. Trong bất kỳ ứng dụng khác, Redis là con đường để đi. Không chỉ bạn nhận được một máy chủ thực tế, mà nhiều hơn một ứng dụng có thể truy cập, nhưng bạn nhận được các tính năng khác như ghi vào đĩa, bộ, danh sách, băm, và nó đi vào.

+2

> * Redis, được lưu trong bộ nhớ * Lưu ý cho người đọc, điều này hơi gây nhầm lẫn. Nó được giữ lại trên đĩa * và * bộ nhớ. Dữ liệu được lưu trữ trong redis không phải là dễ bay hơi, không giống như nói, memcached. –

+0

@CrescentFresh Nhưng không thể xóa phần bộ nhớ khỏi redis, đúng không? Nếu một người đang tìm kiếm để lưu trữ nhiều GB dữ liệu trong sự kiên trì và không có ram để trang trải nó, sau đó redis không phải là một cái gì đó mà có thể được sử dụng, phải không? – superhero

+0

@Erik: không chỉ bạn cần ram để trang trải nó, nhưng bạn cần thêm để tiết kiệm nền. Câu hỏi của bạn và nhận xét này được giải thích đầy đủ tại [faq] (http://redis.io/topics/faq). –

36

Tôi chỉ làm tăng thêm này bởi vì trong cả hai câu trả lời trước tôi không thấy (quan trọng) sự khác biệt này làm ...

  • Redis: Là một máy chủ cơ sở dữ liệu. Bạn giao tiếp với nó thông qua một giao thức nhị phân tùy chỉnh (thông qua thư viện khách thường).
  • LevelDB: Là thư viện triển khai kho khóa-giá trị. Bạn liên lạc với nó bằng cách gọi số C++ API directly.

Nếu bạn đã quen thuộc với SQLite và cách phổ biến nó đã trở thành như một DB nhúng cho các ứng dụng client (Tôi tin rằng cả Android và iOS tàu nó) sau đó bạn nhìn thấy nơi một cái gì đó giống như LevelDB phù hợp.

Hãy tưởng tượng bạn đã viết một ứng dụng PIM phức tạp, có thể một số trình quản lý sổ địa chỉ doanh nghiệp có nghĩa là được cài đặt trên các máy tính cá nhân trong văn phòng. Bạn sẽ không muốn lưu trữ tất cả dữ liệu đó trong XML hoặc JSON mà bạn đã viết/phân tích cú pháp chính mình bên trong ứng dụng của bạn - nếu có thể, bạn nên lưu trữ nó trong một DB để có các mẫu truy cập dễ dàng hơn. Tuy nhiên, bạn cũng không muốn phải gửi và cài đặt một bản sao Redis cục bộ, chạy trên một số cổng ngẫu nhiên chỉ để bạn có thể kết nối với nó ... bạn muốn có một DB mà bạn có thể gọi trực tiếp và nguyên bản từ ứng dụng của bạn và không phải lo lắng về giao tiếp "qua dây" ... bạn muốn các đường ruột thô của một DB mà không cần bất kỳ công cụ nào trong mạng mà bạn không cần trong ứng dụng của ứng dụng khách.

Đây là nơi LevelDB nằm.

Đây là công cụ khác cho công việc khác.

+2

Redis có thể chạy trên các ổ cắm miền Unix. Tôi đã thực hiện điều này trên một thiết bị nhúng để tăng tốc độ khởi động (không cần kết nối mạng để khởi động Redis). – tjameson

+0

bất kỳ Redis điểm chuẩn nào so với MonetDB hoặc VoltDB hoặc RocksDB? – skan