NoSQL数据库如何选型

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

一、数据模型:

  • NoSQL数据模型包括键值、宽列、图形、文档等,与关系型数据库使用的数据结构不同。具有高扩展性,弱一致性,* 适合分布式环境的特点。常见的数据模型,如下:
  • 文档型:MongoDB,适合数据快速采集,以及数据分析。以MongoDB为例,索引结构和内存加载量大特性就很好的支持数据分析。
  • KV型:Memcache,键值存储适合应用程序中通过多个进程或微服务持续共享数据。现在用得少
  • 复杂KV型:Redis,键值存储适合应用程序中通过多个进程或微服务持续共享数据。
  • 图形:适合做距离计算,欺诈检测或者关联结构评估进行深层关系分析。
  • 宽列:适合非常快的速度收集数据,并在大量的数据中进行分析。

    二、存储特性上

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

    三、常见NoSql数据库

    目前在市场上有超过24个开源和商业NoSQL数据库

    MongoDB

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

    优势:

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

    局限性:

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

    2. Memcache

  • 对性能要求极致,不担心数据丢失的选择Memcache。

    优势:

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

    局限性:

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

    3. Redis](https://github.com/0voice/newsql_nosql_library#nav_sec3_chapter1_01)

  • 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收购)
#学习路径#
全部评论

相关推荐

Z_eus:别打招呼直接发你的优势
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-29 22:21
Offer1:小马智行,深圳,测试开发工程师,17.0k*16.0,Offer2:追觅科技,深圳,嵌入式工程师,18.0k*15.0,
嵌软狗都不学:各位base深圳的同事,作为也是并肩作战的一员,今天想站在管理视角,和大家开诚布公地聊一聊:从近几个月的上下班数据对比看来,我们发现一个明显的差异:深圳同事的在岗时间普遍比苏州同事短。很多深圳同事早上9点之后才到公司,晚上不到 20 点就下班了;而总部那边,20点半甚至 22 点后还有不少同事在办公室忙碌,特别是研发团队,加班更是常态。相信去过苏州的同事,对这种场景都不陌生。我很好奇,这是因为苏州工作任务太重还是咱们深圳同事效率真的高到能在更短时间内完成工作?MOVA在深圳成立分公司是为了吸引更优秀的人才贡献更多更高质的价值,公司管理层给我反馈的是深圳招到的多是行业的专家大拿,大部分都是薪资比苏州高的,而且我们办公的租金等也远高于苏州的..MOVA虽脱胎于强壮的集团母体不久,各业务板块尚未实现全面盈利,虽说公司管理层目光长远,不纠结当下的人才投入,但行业内的普遍标准是,员工创造的价值要达到公司雇佣成本的 15 倍以上。大家不妨自我审视一下,自己是否达到了这个标准?如果是抱着划水、按时打卡走人拿毛爷爷的心态那不适合来MOVA,那样过下去不但自己过得尴尬也会影响MOVA这个大船的攻城略地的速度.我并非鼓励大家盲目加班,而是倡导高效工作,拒绝无效忙碌,不要让项目进度因低效受影响,也别把精力浪费在和苏州同事拼打卡时长上,提倡更高的人效比;考虑到两地地域和交通差异,相信大家会找最适合自己发挥的工作方式(比如按时下班后1小时到家晚饭后继续未竟工作等..)大家在遵守公司规章的情况下尽情地体现自己的能力价值,为MOV!和深圳公司争光我们在这边才能更安心更有信心的工作下去;请客BU长、名部门长、项目管理和各业务单元负责人,全面梳理团队情况,及时评估成员工作负荷与成果质量,坚决清退划水害虫痕疫,践行公司价值观,相互监督,防止管理漏洞及渎职。感谢人家的理解,也请人家多担待我的直言不讳……
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务