最具影响力的数字化技术在线社区

168主编 发表于 2019-3-5 19:14:43

NoSql数据模型简介

本帖最后由 168主编 于 2020-3-4 18:03 编辑

传统的关系型数据库你如何设计?以一个电商客户、订单、订购、地址模型来对比下关系型数据库和非关系型数据库?ER图(1:1/1:N/N:N,主外键等常见)https://img2018.cnblogs.com/blog/1491186/201910/1491186-20191031201606447-1293790026.jpg
[*]用户对应多个订单多个地址
[*]每个订单对应每个商品、价格、地址
[*]每个商品对应产品
nosql你如何设计可以尝试使用BSON。BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和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"}}],
      }
    ]
}
}


两者对比,问题和难点
[*]为什么上述的情况可以用聚合模型来处理?

[*]高并发的操作是不太建议有关联查询的,互联网公司用冗余数据来避免关联查询
[*]分布式事务是支持不了太多的并发的
[*]想想关系模型数据库你如何查?如果按照我们新设计的BSon查询会怎么样?
聚合模型
[*]KV键值
[*]bson
[*]列族

[*]顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,
对针对某一列或者某几列的查询有非常大的IO优势。
https://img2018.cnblogs.com/blog/1491186/201910/1491186-20191031201656262-28484776.jpg
[*]图形
https://img2018.cnblogs.com/blog/1491186/201910/1491186-20191031201709710-1263423948.jpgNoSQL数据库的四大分类
[*]KV键值:典型介绍

[*]新浪:BerkeleyDB+redis
[*]美团:redis+tair
[*]阿里、百度:memcache+redis
[*]文档型数据库(bson格式比较多):典型介绍

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

[*]Cassandra, HBase
[*]分布式文件系统
[*]图关系数据库

[*]它不是放图形的,放的是关系比如:朋友圈社交网络、广告推荐系统
[*]社交网络,推荐系统等。专注于构建关系图谱
[*]Neo4J, InfoGrid
四者对比https://img2018.cnblogs.com/blog/1491186/201910/1491186-20191031201726158-1944860231.jpg来源:https://www.cnblogs.com/pythonyeyu/p/11773485.html
页: [1]
查看完整版本: NoSql数据模型简介