1.NoSQL数据模型简介
以一个电商客户、订单、订购、地址模型来对比下关系型数据库和非关系型数据库传统的关系型数据库设计,ER图(1:1/1:N/N:N,主外键等常见)
nosql设计
可以用BSON,BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象数据结构:
json是像字符串一样存储的,bson是按结构存储的(像数组 或者说struct)
存储空间
bson>json
操作速度
bson>json。比如,遍历查找:json需要扫字符串,而bson可以直接定位
修改:
json也要大动大移,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"}}], } ] } }
两者对比,问题和难点
为什么上述的情况可以用聚合模型来处理高并发的操作是不太建议有关联查询的,互联网公司用冗余数据来避免关联查询分布式事务是支持不了太多的并发的
2.NoSQL聚合数据模型
NoSQL技术与传统的关系型数据库相比,一个最明显的转变就是抛弃了关系模型。每种NoSQL解决方案的模型都是不同的。下面吧NoSQL生态系统的广泛使用的模型分为四类:“键值”(hashtable)、“文档”.,"列族"和“图”前三类数据库模型有一个共同特征,我们称其为“面向聚合”。
面向聚合
聚合:在”领域驱动设计“中,我们想把一组相互关联的对象视为一个整体单元来操作,而这个单元就叫聚合。我们通过原子操作更新聚合的值,并且在与数据存储通信时,也是以聚合为单位。选用面向聚合模型的决定性因素,在于它非常适合在集群上运行。这也是NoSQL崛起的关键。特点
聚合数据模型的特点就是把经常访问的数据放在一起(聚合在一块);当然,以这种方式存储不可避免的会有重复,重复是为了更少的交互;
缺点
比如:以学生学号聚合学生信息(含学生姓名、班级、年龄、等信息,甚至英语学科成绩),通过学号查询时,能够在一次交互中查询出该学生的所有信息,但如果想通过学生姓名来查询,就很困难;
聚合结构在事务方面的支持有限;有一些NOSQL产品实现了简单的事务支持,但对于跨越多个聚合结构的事务并不完善;这样带来的好处很明显,对于某个查询请求,能够在与数据库一次交互中将所有数据都取出来;
聚合结构对某些交互有利,却阻碍另一些交互;
不支持跨越多个聚合的ACID事务
聚合模型-----------键值
KV键值
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。
聚合模型-----------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
MongoDBMongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
图关系数据库
Neo4J, InfoGrid
它不是放图形的,放的是关系比如:朋友圈社交网络、广告推荐系统,社交网络,推荐系统等。专注于构建关系图谱,NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。
因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。
四者对比
NOSQL数据库基本知识(二)
最新推荐文章于 2021-02-23 16:21:13 发布