非关系型数据库-持续更新

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38500014/article/details/79174631
非关系型数据(NoSQL = Not Only SQL)Redis和MongoDB


redis缓存技术
shell脚本编程
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB中有三元素:数据库,集合,文档,其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”。
MongoDB的可视化工具robomongo
在插入数据时候即使没当前列属性,能横向插入数据并且保存
$lt/$lte/$gt/$gte/$ne,依次等价于</<=/>/>=/!=
优点:
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点:
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序


与关系型数据库相比,MongoDB的缺点:
一.mongodb不支持事务操作。
 所以事务要求严格的系统(如果银行系统)肯定不能用它。(这点和优点①是对应的)
二.mongodb占用空间过大。
  关于其原因,在官方的FAQ中,提到有如下几个方面:
1、空间的预分配:为避免形成过多的硬盘碎片,mongodb每次空间不足时都会申请生成一大块的硬盘空间,而且申请的量从64M、128M、256M那 样的指数递增,直到2G为单个文件的最大体积。随着数据量的增加,你可以在其数据目录里看到这些整块生成容量不断递增的文件。

2、字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb需要把每个字段的key-value都以BSON的形式存储,如果 value域相对于key域并不大,比如存放数值型的数据,则数据的overhead是最大的。一种减少空间占用的方法是把字段名尽量取短一些,这样占用 空间就小了,但这就要求在易读性与空间占用上作为权衡了。我曾建议作者把字段名作个index,每个字段名用一个字节表示,这样就不用担心字段名取多长 了。但作者的担忧也不无道理,这种索引方式需要每次查询得到结果后把索引值跟原值作一个替换,再发送到客户端,这个替换也是挺耗费时间的。现在的实现算是 拿空间来换取时间吧。
3、删除记录不释放空间:这很容易理解,为避免记录删除后的数据的大规模挪动,原记录空间不删除,只标记“已删除”即可,以后还可以重复利用。
4、可以定期运行db.repairDatabase()来整理记录,但这个过程会比较缓慢

三.MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方。




BSON:类json的一种二进制形式
举例子:{


title:"MongoDB",


last_editor:"192.168.1.122",


last_modified:new Date("27/06/2011"),


body:"MongoDB introduction",


categories:["Database","NoSQL","BSON"],


revieved:false


}
这是一个简单的BSON结构体,其中每一个element都是由key/value对组成的







Redis的优点


性能极高 – Redis能支持超过 100K+ 每秒的读写频率。


丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。


原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。


丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。


Redis的缺点


是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。


总结: Redis受限于特定的场景,专注于特定的领域之下,速度相当之快,目前还未找到能替代使用产品。

















猜你喜欢

转载自blog.csdn.net/weixin_38500014/article/details/79174631