2008-10-13 64 views
16

Tôi cần một cách để thực hiện tra cứu khóa-giá trị trên (có khả năng) hàng trăm GB dữ liệu. Lý tưởng nhất là một cái gì đó dựa trên một hashtable phân phối, mà làm việc độc đáo với Java. Nó phải có khả năng chịu lỗi và nguồn mở.Cần hệ thống tra cứu khóa-giá trị phân phối

Cửa hàng phải liên tục, nhưng lý tưởng nhất sẽ lưu dữ liệu trong bộ nhớ để tăng tốc cho mọi thứ.

Nó sẽ có thể hỗ trợ đọc đồng thời và viết từ nhiều máy (lần đọc sẽ là 100X phổ biến hơn mặc dù). Về cơ bản, mục đích là tìm kiếm nhanh siêu dữ liệu người dùng cho một dịch vụ web.

Có ai có thể đề xuất bất cứ điều gì không?

+0

bạn tối ưu hóa cái gì?Ví dụ, đọc thông lượng (đồng thời đọc từ nhiều máy), dung sai lỗi khi đối mặt với máy móc không có sẵn, số lượng máy thấp ... Bạn cũng cần viết không? – Alexander

+0

Cảm ơn, tôi đã chỉnh sửa câu hỏi với thông tin này. – sanity

+0

Bạn muốn phân phối dữ liệu của mình như thế nào? Nên tất cả các dữ liệu có sẵn cho/on/từ mỗi nút hay không? Trong trường hợp đầu tiên, câu hỏi tiếp theo là "tại sao tìm kiếm phân tán?". – Alexander

Trả lời

12

Bạn có thể muốn xem Hazelcast. Nó được phân phối/phân vùng, siêu lite, dễ dàng và miễn phí.

java.util.Map map = Hazelcast.getMap ("mymap"); 
map.put ("key1", "value1"); 

Kính trọng,

-talip

1

Bạn có lẽ nên xác định nếu nó cần phải được kéo dài hay không, trong bộ nhớ hay không, vv Bạn có thể thử: http://www.danga.com/memcached/

+0

Cảm ơn, tôi đã thêm một lưu ý rằng nó cần phải được kiên trì, mà tôi nghĩ rằng quy tắc ra memcached. – sanity

+0

memcached cũng là suy nghĩ đầu tiên của tôi, nhưng "hàng trăm GB" là một chút quá nhiều cho RAM – Javier

-1

DNS có khả năng để làm điều này, tôi không biết làm thế nào lớn mỗi người hồ sơ của bạn là (8GB tấn dữ liệu nhỏ?), nhưng nó có thể hoạt động.

+0

DNS giả định một cấu trúc dữ liệu phân cấp, tôi sợ nó sẽ không làm những gì tôi cần. – sanity

8

Open Chord là triển khai giao thức CHORD trong Java. Nó là một giao thức bảng băm phân tán phù hợp với nhu cầu của bạn một cách hoàn hảo.

0

Bảng băm được phân phối bao gồm Tapestry, Chord và Pastry. Một trong số đó phù hợp với nhu cầu của bạn.

0

Âm thanh OpenChord hứa hẹn; nhưng tôi cũng xem xét BDB, hoặc bất kỳ hashtable khác không phải SQL, làm cho nó phân phối có thể được chết dễ dàng (nếu số lượng các nút lưu trữ là (gần như) liên tục, ít nhất), chỉ băm chìa khóa trên máy khách để có được máy chủ phù hợp.

2

Tùy thuộc vào trường hợp sử dụng, Terracotta có thể chỉ là những gì bạn cần.

0

nmdb nghe giống như chính xác những gì bạn cần. Phân phối, trong bộ nhớ cache, với một lưu trữ trên đĩa liên tục. Back-end hiện tại bao gồm qdbm, berkeley db và (gần đây đã được thêm sau email nhanh chóng cho nhà phát triển) tokyo cabinet. Mặc dù vậy, kích thước khóa/giá trị bị giới hạn nhưng tôi tin rằng có thể được dỡ bỏ nếu bạn không cần hỗ trợ TICP.

0

Cố gắng phân phối cấu trúc Map từ Redisson, nó dựa trên Redis máy chủ. Sử dụng cấu hình cụm Redis bạn có thể chia dữ liệu trên 1000 máy chủ.

dụ Cách sử dụng:

Redisson redisson = Redisson.create(); 

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap"); 
map.put("123", new SomeObject()); 
map.putIfAbsent("323", new SomeObject()); 
map.remove("123"); 

... 

redisson.shutdown(); 
Các vấn đề liên quan