根据我所做的研究,我怀疑键值存储不是可行的方法,但我希望获得更多的定向输入:
我的应用程序包含许多"文档"。这些目前存储在一种CMIS存储库中。但是,应用程序只有在将这些文档编入索引后才会与这些文档进行交互。这意味着所有读取操作都将触及elasticsearch,并且所有写入操作都将更新elasticsearch和存储库。
请求的功能显示当前存储库过于严格,并且没有理由在该级别强制执行模型架构。当然,这导致了对NoSQL选项的调查。
为了填充这些"文件"进入弹性搜索索引,他们需要住在某个地方,我必须能够得到所有并在它们加载到索引时对它们进行分页(还有一些在此步骤中发生的聚合)命令填充由现有字段构建的字段。)
现在,全部实际上是根据文档类型分阶段完成的,但这个要求可以协商,而不是简单的获取所有类型可能就足够但不理想。
在我对键值存储的理解中,商店对它存储的值一无所知,它们只能通过键引用。这让我想知道当我不打算在任何地方维护完整的密钥列表时,我是否能够执行全部。我已经看到一些键值存储支持使用字典作为键(redis)。我不确定这是否意味着我可以按类型查询(如果它是字典中的条目),或者我是否需要知道完整字典才能获取值?
由于索引的数量只需要在弹性搜索失败时发生,因此性能不是我的首要任务(但肯定不会受到伤害)。对我来说,MongoDB似乎是一个近乎完美的契合。我可以存储文档并按类型轻松查询。
如果重要,对于文档商店,我一直在比较CouchDB,Couchbase和MongoDB。对于键值商店,我一直在关注Redis和BerkeleyDB。
答案 0 :(得分:0)
AFAIK,Redis不允许使用字典作为键,除非通过外部键使用sort function。 对于您的用例,使用Redis意味着您需要维护所有文档的列表和/或按文档类型列出的列表。 虽然这绝对可能,而且相当简单,但我并没有真正感兴趣在那里使用Redis。当你需要高性能时,Redis会发光。这不是您的要求,因此您最好使用文档数据库。
答案 1 :(得分:0)
在Redis中,你可以获取所有的键和值,只需要一些工作和以下命令:
SCAN命令也可以方便地实现,以便将所有内容转储到' redis-cli --scan'以及许多客户端库(例如Python)中。
您可能需要写一些内容才能使其适用于您的特定场景,希望不会太困难。
注意:有一个KEYS命令(与SCAN类似),不建议用于实时制作。虽然没有什么能阻止你构建一个单独的独立从属实例,但是从主服务器复制,断开与主服务器的连接,然后根据需要使用从服务器,而不会对提供实时流量的任何服务产生任何影响。