有人向我推荐使用键值对数据系统来替代我一直在使用的关系型数据库。
但我尚未完全理解这样做如何提高查询效率。据我所知,你只是将结构化数据库转换成一个大而长的键值列表,从而抛弃了许多有助于提高查询效率的信息,这样做真的会更高效吗?
难道我完全错了吗?
有人向我推荐使用键值对数据系统来替代我一直在使用的关系型数据库。
但我尚未完全理解这样做如何提高查询效率。据我所知,你只是将结构化数据库转换成一个大而长的键值列表,从而抛弃了许多有助于提高查询效率的信息,这样做真的会更高效吗?
难道我完全错了吗?
有优点也有缺点。个人而言,我使用两者的混合。使用正确的工具来完成正确的工作,这可能更多地是PostgreSQL或MySQL。
您可以将基本的键值系统比作创建一个具有两列、唯一键和值的SQL表格。这非常快速。您无需进行任何关系或数据校对等操作,只需查找并返回值即可。这是一种过度简化,NoSQL数据库确实具有许多有趣的功能和应用程序,超出了简单的K、V存储。
我不知道你的科学数据是否适合大多数NoSQL实现,这取决于数据。如果您查看HBase或Cassandra,则可能适合科学家的需求(使用适当的行键设计--时间戳不能在第一位,可以查看OpenTSDB)。我知道许多公司通过使用随机排序分区器和传感器的UUID将传感器读数存储在Cassandra中,以便将读数汇总到每日的大行中。每天都会围绕特定用例创建新的数据库,因此答案可能会改变。对于特定的用例,您可以使用特定的数据存储库获得巨大的回报,但代价是灵活性和工具的降低。
效率来自三个主要方面:
在我看来,如果有人向您提出“我们的新数据对关系型数据库管理系统来说太多了”,就应该有数字支持这种说法,否则他们只是想尝试新的闪亮物。NoSQL 是毫无价值的吗?可能不是。它是否像 Java 1.0 一样被炒作,颠覆世界?可能不会。
调查新事物没有坏处,只是不要押注于50年历史、既成的、深入理解的技术而不是新技术。
在这里,我假设您希望优化一个特定的查询,即通过关键字查找记录。其中一个例子可能是通过用户名查找用户信息记录。对于某些系统,这样的查询必须非常快速,而其他所有查询都不重要。
数据库性能中最大的因素将是读/写数据所需的I/O操作数量。大多数数据库系统使用类似的数据结构(即B树),可以在O(log(n))I/O中检索未缓存的数据。为了提供持久更新,数据将必须写入磁盘:大多数系统会按顺序执行此操作,这是最快的方法。
那么,key-value存储在哪里可以获得效率?
大多数关系型数据库管理系统都建立在类似Key-Value存储的基础上,因此您可以将其视为去掉中间商。