NoSQL数据库如何选型

2023-11-16

     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收购)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NoSQL数据库如何选型 的相关文章

随机推荐

  • having where 你真的了解了吗?

    where group by group by 字句 和 where条件语句结合在一起使用 当结合在一起时 where在前 group by 在后 即先对select xx from xx的记录集合用where进行筛选 然后再使用group
  • QT 三种关联信号和槽的办法

    1 手动关联 connect ui gt showChildButton QPushButton clicked this MyWidget showChildDialog 2 自动关联 右键单击按钮弹出菜单中选择 转到槽 void MyD
  • Basic Level 1052 卖个萌 (20分)

    题目 萌萌哒表情符号通常由 手 眼 口 三个主要部分组成 简单起见 我们假设一个表情符号是按下列格式输出的 左手 左眼 口 右眼 右手 现给出可选用的符号集合 请你按用户的要求输出表情 输入格式 输入首先在前三行顺序对应给出手 眼 口的可选
  • vue添加水印踩坑

    介绍 前景 app页面添加水印展示 技术实现 watermark dom 完整代码 vue watermark 实现效果 功能描述 添加 删除 更新水印 引入 方式一 推荐 方便拓展 在index html引入相关文件 方式二 npm包引入
  • java byte[] 学习总结

    最近在学习netty 突然发现自己对字符数组是那么的陌生 吓死宝宝了 然后各种学习 然后测试 终于会用一些了 下线的都是本人的学习笔记 byte表是字符 一个字节 8位 可以组成2 8 256中不同数字 byte存值范围 128 127 1
  • pytorch基本使用_02

    import numpy as np import torch 从numpy引入tensor a np array 2 3 3 print torch from numpy a tensor 2 0000 3 3000 dtype torc
  • java线上CPU100%如何排查

    定位耗费CPU的进程 top c 就可以显示进程列表 然后输入P 按照cpu使用率排序 你会看到类似下面的东西 2 定位耗费CPU的线程 top Hp 1500 就是输入那个进程id就好了 然后输入P 按照cpu使用率排序 你会看到类型下面
  • 单片机c语言数码管显示0到9,单片机如何让8个数码管同时流水显示0到9,大家帮我看看!...

    按你的要求修改如下 include reg52 h 此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16 对数据类型进行声明定义 typedef unsigned char u8 sbit LSA P2
  • Java 网络编程UDP协议之发送数据和接收数据的详解

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 UDP协议 用户数据报协议 User Datagram Protocol UDP是无连接通信协议 即在数据传输时 数据的发送端和接收端不
  • 《信号与系统》4.10.2工频干扰的滤除

    平台 版本 Multisim14 1 参考书籍 信号与系统 4 10 2工频干扰的滤除 工程上 滤除工频干扰比较常用的电路是无源双T陷波滤波器 图示双T的无源陷波滤波器电路 陷波器是某一小频率范围内的带阻滤波器 陷波器的一个常见的应用是滤除
  • Seaborn入门详细教程

    作者 luanhz 来源 小数志 Seaborn入门详细教程 导读 今天我们来介绍 seaborn 这是一个基于matplotlib进行高级封装的可视化库 相比之下 绘制图表更为集成化 绘图风格具有更高的定制性 教程目录 01 初始seab
  • 一文带你了解序列化与反序列化基本原理与操作

    文章目录 一 什么是序列化与反序列化 二 为什么我们需要序列化与反序列化 三 步骤说明 四 注意说明 五 代码说明 六 序列化与反序列化原理 一 什么是序列化与反序列化 序列化是指将对象转换为字节序列的过程 以便于存储或传输 在序列化过程中
  • torch的交叉熵损失函数(cross_entropy)计算(含python代码)

    1 调用 首先 torch的交叉熵损失函数调用方式为 torch nn functional cross entropy input target weight None size average None ignore index 100
  • idea 配置log4j

    1 导入log4j jar包 放在lib目录下 右键jar包 createlibrary 好像是 还有一种方法 2 配置log4j properties文件 设置输出信息 DEBUG级别和ERROR级别 log4j rootLogger d
  • 【图像检测】基于计算机视觉和滤波实现热红外图像温度检测系统含Matlab源码

    1 简介 读入给定的热红外图像 完成彩色图像灰度化 对步骤1中的灰色图像加噪 并采用不同的方法对不同的加噪图像去噪 使得去噪效果更佳 基于灰度图像中标准温度对照带 提取图像中各像素的温度值 2 部分代码 function varargout
  • Keras-多输入多输出【多任务】

    模型结果设计 代码 from keras import Input Model from keras layers import Dense Concatenate import numpy as np from keras utils i
  • Reid 论文文章

    Reid 论文探索 Harmonious Attention Network for Person Re Identification 着重在空间注意力和通道注意力上 结构设计比较巧妙 通过global和local的两级将特征细化 参考链接
  • [QT_027]Qt学习之按钮类控件(QPushButton、QToolButton、QRadioButton、QCheckBox、QCommandLinkButton)

    本文转自 Qt编程指南 作者 奇先生 Qt编程指南 Qt新手教程 Qt Programming Guide 5 1 按钮类的控件 本节介绍图形程序里常见的按钮 包括普通的按钮按钮 之前都用过多次了 还有单选按钮 复选框 命令链接按钮等 本节
  • 【python】jupyter notebook的快捷键

    Jupyter Notebook 提供了许多快捷键以方便操作 这些快捷键分为两类 命令模式快捷键和编辑模式快捷键 命令模式快捷键 在命令模式下 细胞边框是蓝色的 这些快捷键主要用于操作单元格 Enter 进入编辑模式 Shift Enter
  • NoSQL数据库如何选型

    NoSQL数据库在体系结构和功能上各不相同 整体来说 NoSQL数据库选型需要从数据模型和存储特性两方面综合考虑 一 数据模型 NoSQL数据模型包括键值 宽列 图形 文档等 与关系型数据库使用的数据结构不同 具有高扩展性 弱一致性 适合分