什么情况下会选择键值数据存储而不是关系型数据库?在做决策时需要考虑哪些因素?什么时候混合使用两者是最佳选择?如果可能,请提供示例。
什么情况下会选择键值数据存储而不是关系型数据库?在做决策时需要考虑哪些因素?什么时候混合使用两者是最佳选择?如果可能,请提供示例。
键值、分层、MapReduce或图形数据库系统更接近实现策略,它们与物理表示密切相关。选择其中一个的主要原因是如果有强有力的性能论证,并且它非常符合您的数据处理策略。但请注意,这些系统通常不适用于特定的即席查询,最好提前确定查询。
关系型数据库系统试图将逻辑上的业务模型与底层的物理表示和处理策略分离。虽然这种分离并不完美,但仍然相当好。关系系统非常适合处理事实并从事实集合中提取可靠信息。关系系统也非常擅长即席查询,而其他系统则以这方面出了名的糟糕。这在商业世界和许多其他场所非常合适。这就是为什么关系系统如此普遍的原因。
如果是业务应用程序,几乎总是使用关系型系统。对于其他系统,则可能是答案。如果您遇到更多的数据处理问题,例如需要发生的一些流水线和大量数据,而且您事先知道所有查询,则可能会选择另一个系统。
k1 = {foo},k2 = {bar}
等的数据,即使值是较大/嵌套结构,并且希望快速查找,则需要使用KV存储。即使使用适当的索引,在关系型数据库中也无法实现任意键的O(1)查找。有时将此称为“随机查找”。根据我的经验,如果你在考虑使用传统方法还是新颖方法,那么就选择传统方法。虽然新颖方法很有吸引力、挑战性和乐趣,但99.999%的应用程序都需要采用传统方法。
关于关系型数据库和KV数据库,你应该问自己的问题是:
为什么我不想在这种情况下使用关系模型:...
由于你没有描述具体情况,所以没有人能告诉你为什么不应该使用它。KV的“万能理由”是可扩展性,但现在并不是问题。你知道优化的规则吗?
KV是一种高度优化的可扩展解决方案,对于你的应用程序来说可能完全不必要。