NoSQL数据库如何选型

     NoSQL数据库在体系结构和功能上各不相同,整体来说,NoSQL数据库选型需要从数据模型和存储特性两方面综合考虑。

一、数据模型:


      NoSQL数据模型包括键值、宽列、图形、文档等,与关系型数据库使用的数据结构不同。具有高扩展性,弱一致性,适合分布式环境的特点。常见的数据模型,如下:

  • 文档型:MongoDB,适合数据快速采集,以及数据分析。以MongoDB为例,索引结构和内存加载量大特性就很好的支持数据分析。
  • KV型:Memcache,键值存储适合应用程序中通过多个进程或微服务持续共享数据。
  • 复杂KV型:Redis,键值存储适合应用程序中通过多个进程或微服务持续共享数据。
  • 图形:适合做距离计算,欺诈检测或者关联结构评估进行深层关系分析。
  • 宽列:适合非常快的速度收集数据,并在大量的数据中进行分析。

二、存储特性上

 

  • 持久化需求高数据量大,作为核心数据源,或者有轻度计算需求的:MongoDB
  • 对性能要求极致,不担心数据丢失的选择:Memcache
  • 数据生命周期短,数据量相对小,性能要求高:Redis

三、常见NoSql数据库


        目前在市场上有超过24个开源和商业NoSQL数据库
1.MongoDB
       MongoDB面向文档存储,可以存放xml、json、bjson等文档类型。适合持久化需求高数据量大,作为核心数据源,或者有轻度计算需求的适合选用MongoDB。
MongoDB的常见用例包括个性化,实时分析,物联网(IoT),大数据,产品/资产目录,安全和欺诈检测,移动应用程序,数据中心,内容管理以及社交和协作应用程序。
优势:

  1. 面向文档,可以存放xml、json、bjson等文档类型。
  2. 使用GridFS机制,将大文件分隔成多个小文档存放,因此可以存放大体积文件。
  3. 采用预分配空间的方式来防止文件碎片,减少空间浪费。
  4. 内存型数据库,数据操作会先写入内存,然后再会持久化到硬盘中去。
  5. 支持动态查询,支持完全索引,包含内部对象

局限性:

  1. mongodb不支持事务操作。
  2. mongodb占用空间过大。空间预分配机制,为避免形成过多的硬盘碎片,mongodb每次空间不足时都会申请生成一大块的硬盘空间。
  3. 字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb需要把每个字段的key-value都以BSON的形式存储。

2.Memcache
        对性能要求极致,不担心数据丢失的选择Memcache。
优势:

  • Memcached利用多核优势,单实例吞吐量极高,可以达到几十万QPS。
  • 支持直接配置为session handle。

局限性:

  • 只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。
  • 无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。
  • 无法进行数据同步,不能将MC中的数据迁移到其他MC实例中。
  • Memcached内存分配采用Slab Allocation机制管理内存,value大小分布差异较大时会造成内存利用率降低,并引发低利用率时依然出现踢出等问题。需要用户注重value设计。

3.Redis
        Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,适合数据生命周期短,数据量相对小,性能要求高操作很频繁。
优势:

  • 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
  • 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
  • 支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。
  • 单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
  • 支持pub/sub消息订阅机制,可以用来进行消息订阅与通知。
  • 支持简单的事务需求,但业界使用场景很少,并不成熟。

局限性:

  • 单线程,性能受限于CPU性能,单实例最高QPS才可能达到6w左右(稳定工作下QPS2W左右)。
  • 支持简单的事务,但是商不成熟。
  • Redis在string类型上会消耗较多内存。
  • 不支持复杂查询,数据使用形式只限于key-value.

四、其他NoSQL选项


其他开源和商业NoSQL数据库产品包括:

Blazegraph(来自Systap)
Google BigQuery(来自Google)
Helium(Levyx)
Microsoft Azure Cosmos DB,
Neo4j
Oracle NoSQL数据库
Riak KV(来自Basho)
ThingSpan(来自Objectivity)
Titan(来自Aurelius,后被DataStax收购)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NoSQL数据库是一种非关系型数据库,其设计目的是为了处理大规模、高速率的数据存储和检索需求。与传统的关系型数据库不同,NoSQL数据库采用了灵活的数据模型,并放宽了对数据一致性和事务支持的要求,从而具备了更高的可扩展性、高性能和高可用性。 进行NoSQL数据库实验开发需要以下步骤: 1. 确定实验目标:确定需要实验的具体内容和目标,例如测试不同类型的NoSQL数据库的性能或适用场景。 2. 选择合适的NoSQL数据库:根据实验目标选择合适的NoSQL数据库,例如MongoDB、Cassandra、Redis等。根据需要考虑数据库的数据模型、性能特点、易用性等因素。 3. 构建实验环境:搭建实验环境,包括安装和配置所选择的NoSQL数据库,并确保环境的稳定性和可靠性。 4. 设计实验方案:根据实验目标设计实验方案,包括选择合适的数据集、定义实验指标和评估方法。 5. 开发实验代码:根据实验方案开发实验代码,包括数据生成、导入、查询等操作。可以使用编程语言和相关NoSQL数据库的API进行开发。 6. 执行实验:运行实验代码,执行实验并记录实验数据。实验期间需要监控数据库性能,并根据需要进行调整和优化。 7. 分析实验结果:根据实验数据分析实验结果,评估所选NoSQL数据库的性能和适用性。 8. 总结和讨论:总结实验结果,讨论实验中遇到的问题和挑战,并提出改进和优化的建议。 通过NoSQL数据库实验开发,我们可以深入了解不同NoSQL数据库的特性和性能表现,为实际应用场景选择合适的NoSQL数据库提供参考依据。同时,实验开发也促进了对NoSQL数据库的学习和掌握,提高了对数据库技术的理解和应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值