根据我所做的研究,我怀疑键值存储不是要走的路,但我想获得更多直接输入:
- 确定键值存储是否甚至是我使用的可行解决方案。
- 能够阐明我更喜欢文档存储的原因。
解释我的用例
我有一个包含许多“文档”的应用程序。这些当前存储在某种 CMIS 存储库中。然而,应用程序只有在这些文档被索引到 elasticsearch 之后才会与这些文档进行交互。这意味着所有的读取操作都会命中 elasticsearch,并且所有的写入操作都会更新 elasticsearch 和存储库。
请求的功能表明当前存储库过于严格,在该级别强制执行模型模式的理由为零。当然,这导致了对 NoSQL 选项的调查。
为了将这些“文档”填充到弹性搜索索引中,它们需要存在于某个地方,我必须能够在它们加载到索引时获取所有文件并对其进行分页(在此步骤中还会发生一些聚合以填充由现有字段构建的字段)。
现在,get all实际上是根据文档的类型分阶段完成的,但是这个要求可能是可以协商的,相反,一个简单的get all 类型就足够了,但并不理想。
在我对键值存储的理解中,存储对它存储的值一无所知,它们只能被一个键引用。这让我想知道当我不打算在任何地方维护完整的键列表时,我是否可以执行get all 。我已经看到一些键值存储支持使用字典作为键(redis)。我不确定这是否意味着我可以按类型查询(如果它是字典中的条目),或者我是否需要知道完整的字典才能获取值?
由于索引的填充只需要在弹性搜索失败时发生,因此性能不是我的首要任务(但它肯定不会受到伤害)。对我来说,MongoDB 似乎是一个近乎完美的选择。我可以存储文档并轻松按类型查询。
- 鉴于我的用例,文档存储似乎是一个不错的决定吗?
- 这也可以通过键值存储来合理解决吗?
- 使用一个比另一个有任何其他优势吗?
以防万一,对于文档存储,我一直在比较 CouchDB、Couchbase 和 MongoDB。对于键值存储,我一直在研究 Redis 和 BerkeleyDB。