问题
我需要一个键值存储,它可以存储以下形式的值:
DS<DS<E>>
其中数据结构
DS
可以是a
List
、SortedSet
或Array
E
可以是aString
或byte-array
。生成此数据非常昂贵,因此一旦将其放入存储区,我将只对其执行读取查询。本质上,它是一个没有逐出的复杂对象缓存。
示例应用程序
应用程序的一个(可能不好,但足以说明问题)示例是存储文档中的标记化语句,在该文档中,您需要能够快速访问给定
documentID
的pth语句的qth单词。在这种情况下,我将它存储为一个k-v对,如下所示:K - docID
V - List<List<String>>
String word = map.get(docID).get(p).get(q);
我更喜欢避免应用程序集成的地图解决方案(如Java中的EHCHACE)。
我曾经使用过redis,但它似乎不支持第二层数据结构的复杂性。还有其他的k-v解决方案可以帮助我的用例吗?
更新:
我知道我可以序列化/反序列化我的对象,但我想知道是否有其他解决方案。
最佳答案
就平台选择而言,您有两个选择:一个完整的文档数据库将支持任意复杂的对象,但不会有用于处理特定数据结构的内置命令。像redis这样为特定数据结构优化了代码的软件不能支持所有可能的数据结构。
实际上,通过使用id而不是嵌套的数据结构,可以非常接近redis。DS1<DS2<E>>
变为DS1<int>
和DS2<E>
,其中int
来自DS1
,前缀为您提供按键。
使用此结构,您只需两次操作就可以访问任何DS2
。在某些情况下,通过知道给定查询的ds2的id是什么,您可以将其归结为单个操作。