NOSQL数据库基本知识

来源:互联网 发布:免费mv制作软件 编辑:程序博客网 时间:2024/06/10 23:03

1.NoSQL数据模型简介

以一个电商客户、订单、订购、地址模型来对比下关系型数据库和非关系型数据库

传统的关系型数据库设计,ER图(1:1/1:N/N:N,主外键等常见)




nosql设计

可以用BSON,BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象

{
 "customer":{
   "id":1136,
   "name":"Z3",
   "billingAddress":[{"city":"beijing"}],
   "orders":[
    {
      "id":17,
      "customerId":1136,
      "orderItems":[{"productId":27,"price":77.5,"productName":"thinking in java"}],
      "shippingAddress":[{"city":"beijing"}]
      "orderPayment":[{"ccinfo":"111-222-333","txnid":"asdfadcd334","billingAddress":{"city":"beijing"}}],
      }
    ]
  }
}

两者对比,问题和难点

为什么上述的情况可以用聚合模型来处理
高并发的操作是不太建议有关联查询的,互联网公司用冗余数据来避免关联查询
分布式事务是支持不了太多的并发的


2.NoSQL聚合数据模型

NoSQL技术与传统的关系型数据库相比,一个最明显的转变就是抛弃了关系模型。每种NoSQL解决方案的模型都是不同的。下面吧NoSQL生态系统的广泛使用的模型分为四类:“键值”(hashtable)、“文档”.,"列族"和“图”前三类数据库模型有一个共同特征,我们称其为“面向聚合”。
面向聚合
聚合:在”领域驱动设计“中,我们想把一组相互关联的对象视为一个整体单元来操作,而这个单元就叫聚合。我们通过原子操作更新聚合的值,并且在与数据存储通信时,也是以聚合为单位。选用面向聚合模型的决定性因素,在于它非常适合在集群上运行。这也是NoSQL崛起的关键。

特点
聚合数据模型的特点就是把经常访问的数据放在一起(聚合在一块); 
当然,以这种方式存储不可避免的会有重复,重复是为了更少的交互;
缺点
比如:以学生学号聚合学生信息(含学生姓名、班级、年龄、等信息,甚至英语学科成绩),通过学号查询时,能够在一次交互中查询出该学生的所有信息,但如果想通过学生姓名来查询,就很困难;
聚合结构在事务方面的支持有限;有一些NOSQL产品实现了简单的事务支持,但对于跨越多个聚合结构的事务并不完善;

这样带来的好处很明显,对于某个查询请求,能够在与数据库一次交互中将所有数据都取出来; 

  • 聚合结构对某些交互有利,却阻碍另一些交互; 

  • 不支持跨越多个聚合的ACID事务 

聚合模型-----------键值
KV键值

键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。[3] 举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.


聚合模型-----------bson
{
 "customer":{
   "id":1136,
   "name":"Z3",
   "billingAddress":[{"city":"beijing"}],
   "orders":[
    {
      "id":17,
      "customerId":1136,
      "orderItems":[{"productId":27,"price":77.5,"productName":"thinking in java"}],
      "shippingAddress":[{"city":"beijing"}]
      "orderPayment":[{"ccinfo":"111-222-333","txnid":"asdfadcd334","billingAddress":{"city":"beijing"}}],
      }
    ]
  }
}

聚合模型-----------列族

列存储数据库。

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,
对针对某一列或者某几列的查询有非常大的IO优势。





聚合模型-----------图形

图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。








3.NoSQL数据库的四大分类

KV键值:典型介绍-----新浪:BerkeleyDB+redis

                                             美团:redis+tair
                                             阿里、百度:memcache+redis

文档型数据库(bson格式比较多):典型介绍----CouchDB

MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。


图关系数据库
Neo4J, InfoGrid

它不是放图形的,放的是关系比如:朋友圈社交网络、广告推荐系统,社交网络,推荐系统等。专注于构建关系图谱
NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。[2] 如:Neo4J, InfoGrid, Infinite Graph.
因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

四者对比

分类Examples举例典型应用场景数据模型优点缺点键值(key-value)[3] Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。[3] Key 指向 Value 的键值对,通常用hash table来实现[3] 查找速度快数据无结构化,通常只被当作字符串或者二进制数据[3] 列存储数据库[3] Cassandra, HBase, Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限文档型数据库[3] CouchDB, MongoDbWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。图形(Graph)数据库[3] Neo4J, InfoGrid, Infinite Graph社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。[3] 


以上内容摘自网上


0 0