什么时候人们会选择键值数据存储而不是关系数据库?决定其中之一时需要考虑哪些因素?什么时候两者混合是最佳路线?如果可以的话请提供示例。

有帮助吗?

解决方案

根据我的经验,如果您甚至问是否使用传统做法还是深奥做法的问题,那就选择传统做法。虽然深奥的实践很性感、具有挑战性且有趣,但 99.999% 的应用程序都需要传统方法。

关于关系与 KV,您的问题 应该 要问的是:

我为什么要 不是 想要针对这种情况使用关系模型:...

由于您没有描述该场景,因此任何人都不可能告诉您为什么不应该使用它。KV 的“包罗万象”的原因是可扩展性,现在这不是问题。你知道优化的规则吗?

  1. 不要这样做。
  2. (仅适用于专家)现在不要这样做。

KV 是 高度 针对可扩展性的优化解决方案,这对于您的应用程序来说很可能是完全不必要的。

其他提示

键值,heirarchical,地图,减少,或图形数据库系统更接近实施策略,它们严重依赖于物理表示。主要的原因来选择,其中之一是,如果有一个显着的性能参数,并将它非常紧密地配合你的数据处理策略。当心,即席查询,通常不是这些系统实用,你最好提前决定的时间上查询。

关系数据库系统尝试的逻辑,面向业务的模型从底层物理表示和处理策略分离。这种分离是不完美的,但还是相当不错的。关系型系统是伟大的处理事实和提取事实的收集可靠的信息。关系系统也是在即席查询,其中,其他系统都在出了名的坏很大。这是一个非常适合在商业世界和许多其他地方。这就是为什么关系系统是如此普遍。

如果它是一个商业应用程序,关系系统几乎总是答案。对于其他系统,它可能是答案。如果您有更多的数据处理问题,就像需要发生一些事情的管道,你有大量的数据,你知道所有的疑问在前面的,另一个系统可能是适合你的。

如果您的数据是一个简单的事情的清单,你可以得到每个项目的唯一标识符,那么KVS是很好的搭配。他们是我们在大一计算机科学学会了简单的数据结构的密切实现和不允许的复杂关系。

有一个简单的测试:你能代表你的数据和其所有的关系为链接列表或哈希表?如果是,KVS可能工作。如果没有,你需要一个RDB。

您还需要找到一个KVS,将在您的环境中工作。对于KVSes,甚至是主要的,支持是隔靴搔痒它是什么,比如说,PostgreSQL和MySQL / MariaDB的。

一个传统的关系数据库具有缩放超过点的问题。如果这一观点是取决于你正在尝试做一下。

所有云计算的供应商(大多数?)正在提供的键值的数据存储。

不过,如果你有一个复杂的数据结构,然后将支持合理大小的应用程序,您使用关系数据库可以降低开发成本得到。

IMO,密钥值对(例如NoSQL数据库)时效果最好基础数据是非结构化的,不可预测的,或变化的频率。如果你没有结构化数据,关系数据库将是超过其价值的麻烦,因为你将需要大量的架构更改和/或跳火圈,以你的数据符合结构。

KVP / JSON /的NoSql是很大的,因为变化的数据结构不要求完全重构的数据模型。添加一个字段到您的数据对象只是将它添加到数据的问题。硬币的另一面是有限制较少和验证检查在KVP / NoSQL数据库不是关系数据库,以便您的数据可能会导致混乱。

有关系数据模型的性能和节省空间的优点。规范化的关系数据可以了解和验证数据比较容易,因为有表键关系和约束,为您排忧解难。

一个我见过试图左右逢源最坏的模式。试图把一个键值对到关系数据库往往是一个灾难。我会建议使用最重要的是适合你的数据的技术。

如果你想O(1)的基础上键的值的查找,那么想要一个KV存储。也就是说,如果你有如下形式k1={foo}, k2={bar}的数据,等等,甚至当值较大/嵌套结构,并想快速查找,你想有一个KV存储。 即使有适当的索引,你不能达到O(1)在关系数据库查询任意键。有时这被称为“随机查询”。

Alliteratively指出,如果仅曾经由一列中,“主键”如果你会查询,以检索数据的其余部分,然后使用该列的密钥空间和数据的如在一个值的其余部分KV店是做查找最有效的方式。

在此相反,如果你经常被任何数列的查询数据,又名你支持的数据更丰富的查询API,那么你可能需要一个关系数据库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top