Java 在键值存储中处理集合(列表或集合)的最佳方法是什么?

Java 在键值存储中处理集合(列表或集合)的最佳方法是什么?,java,storage,distributed,key-value,Java,Storage,Distributed,Key Value,我想知道,当您的存储像memcached一样时,有什么有效的方法可以从一个非常大的列表中添加/删除项目?也许有一些具有Java接口的分布式存储可以很好地解决这个问题 有人可能会推荐陶土。我知道,但那不是我真正需要的 1.6将具有分布式实现MultiMap,其中一个键可以与一组值相关联 MultiMap<String, String> multimap = Hazelcast.getMultiMap ("mymultimap"); multimap.put ("1", "a"); mu

我想知道,当您的存储像memcached一样时,有什么有效的方法可以从一个非常大的列表中添加/删除项目?也许有一些具有Java接口的分布式存储可以很好地解决这个问题

有人可能会推荐陶土。我知道,但那不是我真正需要的

1.6将具有分布式实现MultiMap,其中一个键可以与一组值相关联

MultiMap<String, String> multimap = Hazelcast.getMultiMap ("mymultimap");
multimap.put ("1", "a");
multimap.put ("1", "b");
multimap.put ("1", "c");
multimap.put ("2", "x");
multimap.put ("2", "y");

Collection<String> values = multimap.get("1"); //containing a,b,c
MultiMap MultiMap=Hazelcast.getMultiMap(“mymultimap”);
multimap.put(“1”、“a”);
multimap.put(“1”、“b”);
multimap.put(“1”、“c”);
multimap.put(“2”,“x”);
multimap.put(“2”,“y”);
集合值=multimap.get(“1”)//包含a、b、c的
是队列、主题、映射、集合、列表、锁和执行器服务的开源事务性、分布式/分区实现。它非常容易使用;只需将hazelcast.jar添加到类路径中并开始编码。几乎不需要配置


Hazelcast是根据Apache许可证发布的,还提供企业级支持。代码位于。

也许您也应该看看

如果忽略并发问题,可以使用键值存储对大多数数据结构进行建模。您的需求并不完全清楚,所以我将对您的用例进行一些假设。希望如果它们不正确,您可以推广该方法

您可以通过一个已知的根节点(我们称之为“node_root”)在存储器中创建一个链表,该节点指向{data,prev_key,next_key}的值元组。prev_key和next_key元素是键名,它们应该遵循“node_foo”的约定,其中foo是一个UUID(理想情况下,您可以按顺序生成它们,如果不是,您可以使用其他类型的UUID)。这提供了对数据的有序访问

现在,如果需要删除一个键,可以在结构上添加第二个索引,该索引的右键为“data”,值为“node_foo”。然后,您可以像删除内存中的链表一样执行删除操作。完成后删除索引节点


现在,请记住,并发修改此列表与并发修改任何共享数据结构一样糟糕。如果您使用的是类似BDB的东西,那么可以使用它们(优秀的)事务支持来避免这种情况。对于没有事务或并发控制的对象,您需要提供对单个线程的外部锁定或序列化访问。

能否提供有关问题的更多详细信息?也许还有另一个答案。