Key-value存储简介.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Key-value存储简介

Key-value存储简介 /blog/744935 具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情况下使用关系型数据库将使得效率低下,并且扩展也将成为未来很大的难题。在这样的情况下,使用Key-value存储将会是一个很好的选择。 它被广泛应用于缓存,搜索引擎等等领域。 ???????? 根据以上的描述,一个好的key-value存储需要满足哪些条件呢? ?? Availability可用性 ?? Scalability可扩展性 ?? Failover故障恢复 ?? Performance高性能 简单来说,就是数据不能丢失,服务不能中断,能对故障进行感知并能自动恢复,读写性能极高。 文件存储 这一部分比较大,以后会另开主题写 单文件还是多文件 不少nosql的产品采用的是单文件存储的,数据量大以后???定会遇到性能瓶颈,这一点无需多说,我想强调的是,采用多文件存储数据优点还是非常多的,不过也需要注意,操作系统对于能够打开的文件数目是由限制的,貌似Linux好像是1024(待确认), Only Append 为了支持更快的写操作,数据文件的写操作只支持append,这个就不多说了,相信大部分的海量存储设计都是这样的。因此,更新操作等价于写操作,不过在写的时候第一步判断写到树的哪个位置时肯定会定位到树已有的节点上,这样可以使得这次写失效或者直接覆盖。 这样存在一个问题,就是对于失效的数据(比如更新过的数据)如何处理,比较好的办法是启动独立线程定时或手动进行清理,请注意,这是一个非常巨大的过程,它将耗光你的CPU和I/O,因为要进行频繁计算和数据迁移。 数据结构 B Tree家族这一数据结构被广泛的运用于数据库索引,如Mssql的B+tree,oracle的B-tree,熟悉索引的朋友一定很清楚,这种数据结构非常适合作为我们的Key-value存储的数据结构.关于B+tree,可以参见下图:它是一个多路搜索树, 数据存储在叶子节点上,非叶子节点作为叶子节点的索引,加速数据的查找,而叶子节点是一个有序的链表,每次搜索都会到达叶子节点才会结束,插入新数据可能会引起节点的分裂。 在本篇文章中,你需要知道,上层的节点成为IN(Internal Node),它持有其他节点的引用,叶子节点的上层是(Bottom Internal Node),而叶子节点则是存储数据的节点。 ?? 图片来自:/manesking/archive/2007/02/09/1505979.aspx 这部分是纯粹的数据结构,就不多说了,如果想深入了解的话可以看看这篇论文《The Ubiquitous B-Tree》 设计要点 Partition 因为系统要具备高扩展性,因此,增加删除机器是频繁的操作,如何将数据均匀分散到集群中呢?比较常用的办法是hash取模的办法,但是这样一来,增加机器的瞬间,按照之前的hash取模方式,数据无法读取,这意味着需要对数据进行迁移,等待机器预热,这是很不好的办法。 目前比较公认的解决办法就是一致性哈希(consistent hashing) 首先按照机器的hash进行顺时针分布,如图,目前有5台机器,如果有一个读写请求,那么hash该key值得的一个hash值,定位到环上,如果没有定位到具体的机器,那么按照顺时针查找,找到的第一个机器就是目标节点。 如果需要新增机器,增加过程为,首先hash新机器得到其位置,加入新机器F,这时访问策略不变,那么按照之前的策略,如果hash到C-F之间的数据就无法找到了,但是这样一来影响就局限于C-F之间,不像之前需要整体迁移了。 最后,为了降低增加机器所带来的影响,我们可以为其增加虚拟节点(virtual nodes)。这样的话服务器在环上的分布就比较均匀,这样多个虚拟节点将对应一个我们的物理节点,增加机器所受到的影响也会变得最小。 Replication 为了达到高可用性和数据不丢失,我们需要通过复制将数据备份到多台机器,replication的实现机制一般是通过Master与replica之间的TCP/IP连接,然后根据相应的一致性策略将数据分发到replica上,这里的一致性策略主要包括两项: 1.???????? replica能够延迟master的时间,这个的意思就是说,在这个时间内更新的数据,replica可能是看不到的。例如你设置的一致性时间是3s,那么在某个特定的时刻,replica上的数据实际上可能是master3s以前的snapshot。 2.???????? master事务提交返回之前是否需要得到replica的确认。为了尽量保证数据不丢失,m

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档