凯里市经济开发区建设局网站,织梦怎么做网站地图,如何建立网站自己做站长,建设网站公司那里好相关的热搜问题解决方案NoSQL数据库发展迅猛#xff0c;据说现在已经有上百种NoSQL数据库了#xff0c;下面来了解下常见的一些NoSQL数据库
先来看张表#xff0c;了解下典型的NoSQL数据库的分类 NoSQL一般特征#xff1a;
临时性键值存储一般作为关系型数据库的缓存来使用由于存在数据丢失的可…NoSQL数据库发展迅猛据说现在已经有上百种NoSQL数据库了下面来了解下常见的一些NoSQL数据库
先来看张表了解下典型的NoSQL数据库的分类 NoSQL一般特征
临时性键值存储一般作为关系型数据库的缓存来使用由于存在数据丢失的可能所以一般用来处理不需要持久保存的数据具有非常快的处理速度用于需要使用expires时(需要定期清除数据)使用一致性散列(Consistent Hashing)算法来分散数据
1、CouchDB
所用语言 Erlang特点DB一致性易于使用使用许可 Apache协议 HTTP/REST双向数据复制持续进行或临时处理处理时带冲突检查采用的是master-master复制见编注2MVCC – 写操作不阻塞读操作可保存文件之前的版本Crash-only可靠的设计需要不时地进行数据压缩视图嵌入式 映射/减少格式化视图列表显示支持进行服务器端文档验证支持认证根据变化实时更新支持附件处理CouchApps独立的 js应用程序需要 jQuery程序库
最佳应用场景适用于数据变化较少执行预定义查询进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。
例如 CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。
2、Neo4j
所用语言 Java 特点基于关系的图形数据库 使用许可 GPL其中一些特性使用 AGPL/商业许可 协议 HTTP/REST或嵌入在 Java中 可独立使用或嵌入到 Java应用程序 图形的节点和边都可以带有元数据 很好的自带web管理功能 使用多种算法支持路径搜索 使用键值和关系进行索引 为读操作进行优化 支持事务用 Java api 使用 Gremlin图形遍历语言 支持 Groovy脚本 支持在线备份高级监控及高可靠性支持使用 AGPL/商业许可
最佳应用场景适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别 例如社会关系公共交通网络地图及网络拓谱
最佳应用场景适用于数据变化较少执行预定义查询进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。
例如 CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。
编注2master-master复制是一种数据库同步方法允许数据在一组计算机之间共享数据并且可以通过小组中任意成员在组内进行数据更新。
3、 Cassandra
所用语言 Java 特点对大型表格和 Dynamo支持得最好 使用许可 Apache 协议 Custom, binary (节约型) 可调节的分发及复制(N, R, W) 支持以某个范围的键值通过列查询 类似大表格的功能列某个特性的列集合 写操作比读操作更快 基于 Apache分布式平台尽可能地 Map/reduce 我承认对 Cassandra有偏见一部分是因为它本身的臃肿和复杂性也因为 Java的问题配置出现异常等等
最佳应用场景当使用写操作多过读操作记录日志如果每个系统组建都必须用 Java编写没有人因为选用 Apache的软件被解雇 例如银行业金融业虽然对于金融交易不是必须的但这些产业对数据库的要求会比它们更大写比读更快所以一个自然的特性就是实时数据分析
4、HBase
配合 ghshephard使用
所用语言 Java 特点支持数十亿行X上百万列 使用许可 Apache 协议HTTP/REST 支持 Thrift见编注4 在 BigTable之后建模 采用分布式架构 Map/reduce 对实时查询进行优化 高性能 Thrift网关 通过在server端扫描及过滤实现对查询操作预判 支持 XML, Protobuf, 和binary的HTTP Cascading, hive, and pig source and sink modules 基于 Jruby JIRB的shell 对配置改变和较小的升级都会重新回滚 不会出现单点故障 堪比MySQL的随机访问性能
最佳应用场景适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。
例如 Facebook消息数据库更多通用的用例即将出现 编注4Thrift 是一种接口定义语言为多种其他语言提供定义和创建服务由Facebook开发并开源。
5、Tokyo Tyrant
持久性的键值存储用来处理需要持久保存高速处理的数据具有非常快的处理速度用于不需要定期清除的数据使用一致性散列(Consistent Hashing)算法来分散数据
6、redis
优点
支持多种数据结构如 string字符串、 list(双向链表)、dict(hash表)、set(集合、zset(排序set)、hyperloglog基数估算支持持久化操作可以进行aof及rdb数据持久化到磁盘从而进行数据备份或数据恢复等操作较好的防止数据丢失的手段。支持通过Replication进行数据复制通过master-slave机制可以实时进行数据的同步复制支持多级复制和增量复制master-slave机制是Redis进行HA的重要手段。单线程请求所有命令串行执行并发情况下不需要考虑数据一致性问题。支持pub/sub消息订阅机制可以用来进行消息订阅与通知。支持简单的事务需求但业界使用场景很少并不成熟。
缺点
Redis只能使用单线程性能受限于CPU性能故单实例CPU最高才可能达到5-6wQPS每秒取决于数据结构数据大小以及服务器硬件性能日常环境中QPS高峰大约在1-2w左右。支持简单的事务需求但业界使用场景很少并不成熟既是优点也是缺点。Redis在string类型上会消耗较多内存可以使用dicthash表压缩存储以降低内存 耗用。
7、Memcache
优点
Memcached可以利用多核优势单实例吞吐量极高可以达到几十万QPS取决于key、value的字节大小以及服务器硬件性能日常环境中QPS高峰大约在4-6w左右。适用于最大程度扛量。支持直接配置为session handle。
缺点
只支持简单的key/value数据结构不像Redis可以支持丰富的数据类型。无法进行持久化数据不能备份只能用于缓存使用且重启后数据全部丢失。无法进行数据同步不能将MC中的数据迁移到其他MC实例中。Memcached内存分配采用Slab Allocation机制管理内存value大小分布差异较大时会造成内存利用率降低并引发低利用率时依然出现踢出等问题。需要用户注重value设计。
8、MongoDB
优点
更高的写负载MongoDB拥有更高的插入速度。处理很大的规模的单表当数据表太大的时候可以很容易的分割表。高可用性设置M-S不仅方便而且很快MongoDB还可以快速、安全及自动化的实现节点数据中心故障转移。快速的查询MongoDB支持二维空间索引比如管道因此可以快速及精确的从指定位置获取数据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话这将极大地提高数据库的查询速度。非结构化数据的爆发增长增加列在有些情况下可能锁定整个数据库或者增加负载从而 导致性能下降由于MongoDB的弱数据结构模式添加1个新字段不会对旧表格有任何影响 整个过程会非常快速。
缺点
不支持事务。MongoDB占用空间过大 。MongoDB没有成熟的维护工具。
9、Redis、Memcache和MongoDB的区别
9.1 性能
三者的性能都比较高总的来讲Memcache和Redis差不多要高于MongoDB。
9.2 便利性
memcache数据结构单一。 redis丰富一些数据操作方面redis更好一些较少的网络IO次数。 mongodb支持丰富的数据表达索引最类似关系型数据库支持的查询语言非常丰富。
9.3 存储空间
redis在2.0版本后增加了自己的VM特性突破物理内存的限制可以对key value设置过期时间类似memcache。 memcache可以修改最大可用内存,采用LRU算法。 mongoDB适合大数据量的存储依赖操作系统VM做内存管理吃内存也比较厉害服务不要和别的服务在一起。
9.4 可用性
redis依赖客户端来实现分布式读写主从复制时每次从节点重新连接主节点都要依赖整个快照,无增量复制因性能和效率问题所以单点问题比较复杂不支持自动sharding,需要依赖程序设定一致hash 机制。一种替代方案是不用redis本身的复制机制采用自己做主动复制多份存储或者改成增量复制的方式需要自己实现一致性问题和性能的权衡。
Memcache本身没有数据冗余机制也没必要对于故障预防采用依赖成熟的hash或者环状的算法解决单点故障引起的抖动问题。
mongoDB支持master-slave,replicaset内部采用paxos选举算法自动故障恢复,auto sharding机制对客户端屏蔽了故障转移和切分机制。
9.5 可靠性
redis支持快照、AOF依赖快照进行持久化aof增强了可靠性的同时对性能有所影响。 memcache不支持通常用在做缓存,提升性能。 MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性。
9.6 一致性
Memcache 在并发场景下用cas保证一致性。 redis事务支持比较弱只能保证事务中的每个操作连续执行。 mongoDB不支持事务。
9.7 数据分析
mongoDB内置了数据分析的功能(mapreduce),其他两者不支持。
9.8 应用场景
redis数据量较小的性能操作和运算上。 memcache用于在动态系统中减少数据库负载提升性能;做缓存提高性能适合读多写 少对于数据量比较大可以采用sharding。 MongoDB:主要解决海量数据的访问效率问题。