可以通过键值访问的复杂集合的外部商店

|| 问题 我需要一个键值存储,它可以存储以下形式的值:
DS<DS<E>>
  数据结构
DS
可以是   
List
SortedSet
或an4ѭ      和
E
可以是
String
byte-array
。 生成此数据非常昂贵,因此一旦将其放入存储中,我将仅对其执行读取查询。本质上,它是一个没有逐出的复杂对象缓存。 应用范例 一个应用程序的示例(可能很糟糕,但足以说明问题)正在存储文档中的标记化句子,您需要能够快速访问给出
documentID
的第p个句子的第q个单词。在这种情况下,我将其存储为K-V对,如下所示:
K - docID
V - List<List<String>>
String word = map.get(docID).get(p).get(q);
我更喜欢避免与应用程序集成的Map解决方案(例如Java中的EhCache)。 我曾与Redis合作,但它似乎不支持第二层数据结构的复杂性。还有其他可以帮助我解决用例的K-V解决方案吗? 更新: 我知道我可以序列化/反序列化对象,但是我想知道是否还有其他解决方案。     
已邀请:
        在平台选择方面,您有两个选择-完整的文档数据库将支持任意复杂的对象,但不会内置用于处理特定数据结构的命令。像Redis这样的针对特定数据结构进行了优化的代码无法支持所有可能的数据结构。 实际上,通过使用id而不是嵌套的数据结构,您可以与Redis非常接近。
DS1<DS2<E>>
变成
DS1<int>
和ѭ12with,with14中的ѭ13giving和一个前缀为holding15ѭ的前缀。 通过这种结构,您只需两个操作就可以访问任何ѭ5。在某些情况下,您可以通过了解给定查询的DS2 ID来将其简化为单个操作。     
        我犹豫要“推荐”它,但是我知道的唯一可以有效处理此类多维数据的存储引擎之一就是Intersystems Cache。我必须在上一份工作中使用它,主要是使用它基于MUMPS的语言对它进行编码。我不建议您采用本机方法,除非您讨厌自己或开发人员。但是,它们确实具有不错的Java适配器,这似乎是您正在使用的适配器。我已经看到它可以处理数十亿条记录,并有效地存储在嵌套的二叉树表中。可以使用的深度(尺寸数)没有实际限制。但是,这是非常专有的解决方案。有一个名为GT.M的开源替代方案,但我不知道它与非M或C语言的兼容性如何。     
        任何键值存储都支持复杂的值,您只需要对数据进行序列化/反序列化即可。 如果只想对数据的特定部分进行快速检索,则可以使用更复杂的键。在您的示例中,这将是:     K-元组(docID,p,q)     

要回复问题请先登录注册