实现_Nosql精粹

cap

CP AP 优点 缺点 适用场景 不适用场景
键值数据库 Berkeley DB / MemcacheDB / Redis / Scalaris Riak / Dynamo / Voldemort 1.数据结构支持广泛,值可以是二进制,文本等各种格式。 2.凯苏查询 1.只能根据key来搜索,无法根据值来搜索。2.只有针对单行的一致性。乐观写入实现成本高 1.存放会话信息 2.用户配置信息 3.购物车数据 1. 需要在数据间建立联系 2.含有多项操作的事务 3.按值查询数据 4.操作关键字集合
文档数据库 MongoDB / Terrastore SimpleDB / CouchDB 1.可以只更新部分文档 2.支持子域查询 查询性能不高 1. 事件记录 2. 内容管理系统和博客系统 3. 网站实时分析 4. 电子商务应用程序 1.包含多项操作的复杂查询(不适合跨文档的原子操作) 2.查询持续变化(结构变化)的聚合结构(查询语句随数据变化变化大)
列族数据库 BigTable / Hbase / Hypertalbe Cassandra 1. 半结构化,最适合用来分析庞大的数据集 2处理大量数据,应对极高写负载,高可用,支持跨数据中心 没有文档数据库灵活,功能局限 1. 事件记录 2.计数器 3内容管理和博客平台 1.需要ACID事务 2.查询模式经常变化
  • CP - 满足一致性,分区容忍必的系统,通常性能不是特别高。
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

参考文献:NoSQL数据库的35个应用场景使用键值类NoSQL数据存储时的数据建模解读NoSQL数据库的四大家族

一些产品的一致性和读写性能是可以通过设置控制的。比如Riak可以参考这篇文章.

图数据库

Neo4J, Infinite Graph, HyperGraphDB, OrientDB

适用案例

  • 互联数据
  • 安排运输路线、分派货物和基于位置的服务
  • 推荐引擎

    不适用的场合

  • 更新全部或某个子集内实体的场合

  • 涉及整张图的操作

第12章 模式迁移

  • 若要迁移关系型数据库等“强模式”的数据库,可将历次模式变更及其数据迁移操作保存于“版本控制序列”中。
  • 因程序代码要依照“隐含模式”来访问无模式数据库的数据,故其数据迁移仍需谨慎处理。
  • 无模式数据库亦可借用强模式数据库的迁移技术。
  • 无模式数据库可使用“增量迁移”技术更新数据,以便在不影响应用程序读取数据的前提下,修改数据的隐含模式。

第13章 混合持久化

  • 混合持久化旨在使用不同数据库技术处理多种数据存储需求。
  • 混合持久化既可为企业中多个程序所用,也可以运用在单个应用程序中。
  • 将数据访问封装成服务,可以减少数据库变动对系统其它部分的影响。
  • 新增数据库技术会让编程和操作更复杂,所以要权衡引入新数据库带来的好处和引入它带来的复杂度的利弊。

第15章 选择合适的数据库

  • 通过使用更符合应用程序需求的数据库来改善程序员的工作效率。
  • 以能处理大数据量、降低延迟且增进数据吞吐量的某种技术组合来改善数据访问性能。
  • 在决定使用某个NoSQL技术之前,一定要测试其是否如预期般改善了程序员工作效率和数据访问性能。
  • 用服务来封装数据库,即能在需求变更或技术成熟后改换其所封装的数据库技术。可将应用程序各部分划分到不同服务中,以便为既有程序引入NoSQL数据库。
  • 大部分应用程序,尤其是“非战略性的”应用程序,应该继续使用关系型数据库技术,至少在NoSQL技术环节尚未更加成熟时是如此。

参考文献


本文采用创作共用保留署名-非商业-禁止演绎4.0国际许可证,欢迎转载,但转载请注明来自http://thousandhu.github.io,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://thousandhu.github.io/2016/10/14/实现-Nosql精粹/