常见 NoSQL 数据库的使用与操作指南
1. IBM Cloudant 数据库介绍与操作
1.1 简介
IBM Cloudant 是一款专为云环境打造的 NoSQL 数据库平台。你既可以将其作为完全受控的数据库即服务(DBaaS),运行在像 IBM SoftLayer 这样的公共云平台上,也能通过名为 Cloudant Local 的本地版本来使用。它支持在私有云、公共云或混合云等模式下进行部署。
1.2 功能特性
- JSON 数据存储 :采用 JavaScript 对象表示法(JSON)存储数据,以自描述文档形式呈现,便于处理多结构数据和修改模式。
- 增量式 MapReduce :可为 JSON 数据生成二级索引,实时更新数据,并能执行高级聚合函数。
- 地理空间功能 :有效助力地理信息系统数据分析,为应用增添位置服务,如预测路线、路线优化和边界多边形等。
- 搜索功能 :基于强大的 Apache Lucene 实现全文搜索,支持短语、邻近、通配符和模糊查询。
- 管理与监控 :具备监控系统和管理基础设施,能快速响应环境变化。
- 安全保障 :为应用提供丰富的安全需求支持。
1.3 操作步骤
1.3.1 注册与登录
- 访问链接 https://cloudant.com/sign-up 注册 Cloudant 数据库账号。
- 注册成功后,登录你的账号。
1.3.2 文档创建
文档创建包含以下要素:
- _id :设计文档 ID
- _rev :设计文档修订版本
- Views :表示 MapReduce 视图的对象
- Index name :索引定义(每个索引一个)
- Indexes :描述搜索索引的对象
- Stopwords (可选):分析器的默认停用词列表如下:
“a”, “an”, “as”, “at”, “are”, “and”, “be”, “but”, “for”, “in”, “is”, “it”, “if”, “into”, “no”, “not”,
“on”, “of”, “or”, “such”, “to”, “the”, “this”, “that”, “there“, “their”, “these”, “they”,
“then“, “with”, “will“, “was”
示例:
// 示例 1
{
"prices": [{
"Reliance Mega Mall": 6.12,
"Price Max": 67.23,
"_Express": 3.55,
"_id": "453m34-34ne-43nw-34dedfef",
"_item": "Britannia"
}]
}
// 示例 2
{
"docs": [{
"name": "Sam_Davis",
"age": 32,
"gender": "male",
"_id": "90jh89y76-r6rt-2d8h-aac4-503782f31b07",
"_signal": {}
}]
}
1.3.3 查询索引创建
Cloudant Query 是 Cloudant 数据库的 JSON 查询语法,涵盖多种索引类型。可通过 MapReduce 视图(索引类型为 JSON)和搜索索引(索引类型为文本)来构建。
示例:
// 示例 1
{
"index": {
"fields": [
"India", "China", "Japan", "Hongkong"
]
},
"type": "json"
}
// 示例 2
{
"index": {
"fields": [
"London", "Manchestor", "Barminghum"
]
},
"type": "json"
}
1.3.4 地理空间索引与视图创建
地理空间索引和视图创建示例代码如下:
// 地理空间索引示例 1
function (messi) {
if (messi.geometry && messi.geometry.coordinates) {
st_index(messi.geometry);
}
}
// 地理空间索引示例 2
function (beckham) {
if (beckham.geometry && beckham.geometry.coordinates) {
st_index(385, 233, 322);
st_index(beckham.geometry);
}
}
// 视图示例 1
function (beckham) {
emit(beckham._id, 1);
}
// 视图示例 2
function (keys, reproduce) {
if (reproduce) {
i = 56;
j = 98.09;
values = j + k;
return sum(values);
} else {
return values.length;
}
}
1.3.5 数据库复制、删除与查询
- 复制命令结构
- 方法 :COPY /cloudant_db/_design/newGeoIndex-doc
- 请求 :无
- 响应 :JSON 表示修订版本和新文档
- 允许角色 :_writer
- 查询参数 :
- 参数 :rev
- 描述 :要复制的修订版本
- 可选 :是
- 类型 :字符串
- HTTP 头 :
- 头信息 :Destination
- 描述 :目标文档(及可选的修订版本)
- 可选 :否
- 删除命令结构
- 方法 :DELETE /cloudant_db/_design/newGeoIndex-doc
- 请求 :无
- 响应 :已删除设计文档的 JSON
- 允许角色 :_writer
- 查询参数 :
- 参数 :rev
- 描述 :用于验证的文档当前修订版本
- 可选 :是
- 类型 :字符串
- HTTP 头 :
- 头信息 :If-Match
- 描述 :用于验证的文档当前修订版本
- 可选 :是
- 使用索引查找文档
- 方法 :POST
- URL 路径 :/cloudant_db/_find
- 响应体 :表示查询结果的 JSON 对象
- 允许角色 :_reader
- 列出所有 Cloudant 查询索引
- 方法 :GET
- URL 路径 :/cloudant_db/_index
- 响应体 :描述索引的 JSON 对象
- 允许角色 :_reader
1.3.6 返回码说明
| 代码 | 描述 |
|---|---|
| 200 | 索引创建成功或已存在 |
| 201 | 数据库创建成功 |
| 202 | 数据库在部分节点上成功创建,但节点数量少于写入法定数量 |
| 304 | 未修改 |
| 400 | 请求错误,请求体格式不符合指定要求 |
| 401 | 客户端请求的项目使用给定授权不可用,或未提供授权 |
| 403 | 数据库名称无效 |
| 404 | 请求的资源未找到,结构包含 error 和 reason 两个键 |
| 405 | 使用无效的 HTTP 请求类型发送请求,例如需要 POST 却使用了 PUT,可能由无效的 URL 字符串导致 |
| 406 | 服务器不支持请求的内容类型 |
| 412 | 客户端发送的请求头与服务器的能力不匹配 |
| 415 | 不支持的内容类型 |
| 416 | 请求头中指定的范围无法被服务器满足 |
| 417 | 不支持批量发送文档 |
| 500 | 客户端发送的请求无效,可能是提交的 JSON 或请求中的信息无效 |
| 503 | Cloudant 请求无法处理,可能是 Cloudant 账户名称拼写错误 |
1.3.7 查询操作符与数组
| 操作符 | 参数 | 用途 |
|---|---|---|
$and | 数组 | 若数组数据中的所有选择器都匹配,则有效 |
$or | 数组 | 若数组数据中的任何一个选择器匹配,则有效 |
$not | 选择器 | 若给定的选择器不匹配,则有效 |
$nor | 数组 | 若数组数据中的所有选择器都不匹配,则有效 |
$all | 数组 | 若数组值包含参数数组的所有元素,则匹配 |
$elemMatch | 选择器 | 匹配并返回所有包含数组字段且至少有一个元素满足所有预定查询条件的文档 |
1.4 操作流程 mermaid 流程图
graph LR
A[注册账号] --> B[登录账号]
B --> C[创建文档]
C --> D[创建查询索引]
D --> E[创建地理空间索引]
E --> F[创建视图]
F --> G[数据库复制/删除/查询]
2. InfluxDB 数据库介绍与操作
2.1 简介
InfluxDB 是一款专门为处理高写入和查询负载而从头开发的时间序列数据库,是 TICK 堆栈的第二部分。它适用于处理大量带时间戳的数据,如物联网传感器数据、DevOps 监控和实时分析等场景。
2.2 功能特性
- 高效数据存储 :专为时间序列数据定制的高效数据存储,TSM 引擎实现了高数据摄取速度和数据压缩。
- 无外部依赖 :无需外部依赖,自成一体。
- 多协议支持 :支持多种数据摄入协议,如 OpenTSDB、Graphite 和 Collectd。
- 类 SQL 查询语言 :提供类似 SQL 的查询语言,方便查询聚合数据。
2.3 操作步骤
2.3.1 安装准备
- 访问以下链接下载 GIT 和 Go 编程语言:
- Git: https://git-for-windows.github.io/
- Go 编程语言: https://golang.org/dl/
- 安装 Git:
- 下载完成后运行安装程序,仔细阅读 GNU 通用公共许可证信息,然后点击“下一步”。
- 点击“浏览”按钮选择 Git 的安装目标文件夹,然后点击“下一步”。
- 根据需求选择或取消选择安装组件,然后点击“下一步”。
- 选择开始菜单文件夹来放置程序快捷方式,或勾选取消创建开始菜单文件夹,然后点击“下一步”。
- 勾选“启用文件系统缓存”,然后点击“下一步”。
- 选择终端模拟器配置,然后点击“下一步”。
- 根据需要调整路径环境,然后点击“下一步”。
- 设置行尾转换配置,选择自己的风格,然后点击“下一步”。
- 等待安装完成。
- 安装 Go 编程语言:
- 下载完成后运行安装程序,仔细阅读最终用户许可协议,然后点击“下一步”。
- 点击“下一步”。
- 点击“更改”按钮选择 GO1.6.2 的安装目标文件夹,然后点击“下一步”。
- 点击“安装”按钮。
- 等待安装完成。
2.3.2 下载与启动
- 从链接 https://github.com/adriencarbonne/influxdb/releases/download/v0.9.0-rc11/influxdb_v0.9.0-rc11.zip 下载 InfluxDB。
- 下载完成后会生成三个文件:
-
Infux:用于管理数据库,可进行数据库创建和操作。 -
Influxd:用于在本地主机(本地机器)上创建服务器,方便与数据库进行交互,为系统运行 Influx 数据库提供环境。 -
Urlgen:处理查询执行。
-
- 执行
Influxd.exe文件,为 InfluxDB 创建运行环境。
2.3.3 数据库操作
- 创建数据库
- CLI 方法 :在 Influx CLI 窗口中输入
Create database sample。 - GUI 方法 :打开浏览器,在 URL 中输入
http://localhost:8083,通过 GUI 创建数据库。
- CLI 方法 :在 Influx CLI 窗口中输入
- 显示数据库 :在 Influx CLI 窗口中输入
Show database,然后输入use sample选择使用该数据库。 - 创建保留策略 :在 Influx CLI 窗口中输入
Create RETENTION POLICY SAM ON sample DURATION 300m REPLICATION 4 DEFAULT(可不带 DEFAULT 运行查询)。 - 修改保留策略 :在 Influx CLI 窗口中输入
Alter RETENTION POLICY SAM ON sample DURATION 300m RELPLICATION 4 DEFAULT。 - 删除保留策略 :在 Influx CLI 窗口中输入
DROP RETENTION POLICY SAM ON sample。 - 显示现有用户 :在 Influx CLI 窗口中输入
Show users。
2.4 数据类型与关键字
2.4.1 数据类型
| 数据类型 | 格式 | 示例 |
|---|---|---|
bool_lit | TRUE | FALSE | TRUE |
regex_lit | "/" { unicode_char } "/" | "/abc/" |
int_lit | ("1" … "9") {digit } | 123 |
float_lit | Int_lit “.” Int.lit | 123.45 |
String_lit | ‘,’{Unicode_char} ‘,’’ | 'hello' |
Time_lit | "2006-01-02 15:04:05.999999" | "2006-01-02" | "2023-10-01" |
2.4.2 关键字
InfluxDB 支持的关键字包括: All , Alter , As , Asc , Begin , By , Create , Continuous , Database , Databases , Default , Delete , Desc , Drop , Duration , End , Exists , Explain , Field , From , Grant , Group , If , In , Inner , Insert , Into , Key , Keys , Limit , Show , Measurement , Measurements , Not , Offset , On , Order , Password , Policy , Policies , Privileges , Queries , Query , Read , Replication , Retention , Revoke , Select , Series , Server , Slimit , Soffset , Teg , To , User , Users , Values , Where , With , Write 。
2.5 时间单位
| 单位 | 含义 |
|---|---|
u 或 µ | 微秒(一秒的百万分之一) |
ms | 毫秒(一秒的千分之一) |
s | 秒 |
M | 分钟 |
H | 小时 |
D | 天 |
W | 周 |
2.6 操作流程 mermaid 流程图
graph LR
A[下载安装 Git 和 Go] --> B[下载 InfluxDB]
B --> C[执行 Influxd.exe]
C --> D[执行 Influx.exe 创建数据库]
D --> E[使用 CLI 或 GUI 创建数据库]
E --> F[显示数据库]
F --> G[创建保留策略]
G --> H[修改保留策略]
H --> I[删除保留策略]
I --> J[显示现有用户]
3. Redis 数据库介绍与操作
3.1 简介
Redis 是一款开源的(遵循伯克利软件分发许可证 BSD)内存数据结构存储系统,可作为数据库、缓存和消息代理使用。它用 C 语言编写,可在大多数类 Unix 系统(如 Linux、OS X 和 *BSD)上运行,无需外部依赖。虽然没有官方的 Windows 版本支持,但微软开发并维护了一个 Win - 64 端口。
3.2 功能特性
- 丰富的数据结构 :支持列表、字符串、集合、哈希、有序集合(支持范围查询)、HyperLogLog、位图和地理空间索引(支持半径查询)等多种数据结构。
- 高可用性 :通过 Redis Sentinel 实现高可用性,通过 Redis Cluster 实现自动分区。
- 复制与持久化 :支持主从异步复制,具备 LRU 淘汰机制、事务、Lua 脚本和不同级别的磁盘持久化。
- 其他特性 :包括发布/订阅(Pub/Sub)、键的有限生存时间、自动故障转移等。
3.3 优点
- 支持丰富数据类型 :原生支持多种数据类型,便于解决各种问题。
- 多功能工具 :可用于消息队列、缓存、存储短期数据(如网页访问计数、Web 应用会话等)。
- 速度极快 :每秒可执行约 110,000 次 SET 操作和约 81,000 次 GET 操作。
- 原子操作 :所有操作都是原子性的,确保多个客户端同时访问时能获取最新值。
3.4 操作步骤
3.4.1 安装
- 访问链接 https://github.com/rgl/redis/downloads 下载 Redis。
- 下载完成后运行安装程序,在 Redis 安装向导屏幕中点击“下一步”。
- 在许可协议屏幕中,选择接受协议,然后点击“下一步”。
- 点击“浏览”按钮选择 Redis 的安装目标文件夹,然后点击“下一步”。
- 点击“是”按钮。
- 点击“浏览”按钮选择将程序快捷方式放置的不同文件夹,若不需要则点击“下一步”。
- 点击“安装”按钮开始安装。
- 安装完成后,点击“完成”按钮结束安装。
3.4.2 验证安装
安装完成后,会弹出 README 记事本文件。打开 Redis 客户端,输入命令 PING 并按回车键。若 Redis 服务器返回响应,则说明安装成功。
3.4.3 数据操作
- 存储数据 :在 Redis 客户端中输入
set firstnumber 1并按回车键,将值 1 存储到键firstnumber中。 - 查看键数量 :输入
keys *并按回车键,查看 Redis 服务器中存储的键的数量。 - 存储更多数据 :输入
set secondnumber 2并按回车键,存储另一个键值对。 - 再次查看键数量 :输入
keys *并按回车键。 - 删除所有数据 :输入
flushall并按回车键,删除 Redis 服务器中的所有数据。 - 再次查看键数量 :输入
keys *并按回车键,此时应显示“empty list or set”,表示服务器中没有任何数据。 - 重新存储和获取数据 :输入
set firstnumber 1重新存储数据,输入get firstnumber获取存储的值。 - 数据增减操作 :输入
incr firstnumber对firstnumber的值进行递增操作,输入decrby secondnumber对secondnumber的值进行递减操作。
3.5 操作流程 mermaid 流程图
graph LR
A[下载 Redis] --> B[运行安装程序]
B --> C[接受许可协议]
C --> D[选择安装文件夹]
D --> E[完成安装]
E --> F[打开 Redis 客户端]
F --> G[输入 PING 验证安装]
G --> H[存储数据]
H --> I[查看键数量]
I --> J[存储更多数据]
J --> K[再次查看键数量]
K --> L[删除所有数据]
L --> M[再次查看键数量]
M --> N[重新存储和获取数据]
N --> O[数据增减操作]
综上所述,本文详细介绍了 IBM Cloudant、InfluxDB 和 Redis 这三款常见 NoSQL 数据库的特点、功能和操作步骤。通过这些内容,你可以根据自己的需求选择合适的数据库,并按照操作指南进行相应的配置和使用。希望这些信息对你有所帮助。
4. 三种数据库的对比分析
4.1 适用场景对比
| 数据库 | 适用场景 |
|---|---|
| IBM Cloudant | 适合处理多结构数据,如 JSON 数据,在需要地理空间功能和全文搜索功能的应用中表现出色,常用于移动应用、Web 应用等。 |
| InfluxDB | 专门用于时间序列数据的处理,如物联网传感器数据、DevOps 监控和实时分析等场景。 |
| Redis | 适用于需要高速读写和缓存的场景,如网页访问计数、Web 应用会话存储、消息队列等,也可用于构建高可用和可扩展的应用。 |
4.2 性能对比
| 数据库 | 性能特点 |
|---|---|
| IBM Cloudant | 提供了多种索引类型和查询功能,能有效处理复杂的查询需求,但在处理大量数据的写入和读取时,性能可能会受到一定影响。 |
| InfluxDB | 采用 TSM 引擎,实现了高数据摄取速度和数据压缩,在处理时间序列数据的写入和查询时性能优异。 |
| Redis | 将整个数据集加载到内存中,读写速度极快,每秒可执行大量的 SET 和 GET 操作,但受限于内存大小,不适合存储大量数据。 |
4.3 数据模型对比
| 数据库 | 数据模型 |
|---|---|
| IBM Cloudant | 基于 JSON 文档存储数据,支持多结构数据和灵活的模式修改。 |
| InfluxDB | 采用时间序列数据模型,以时间戳为索引,存储和处理时间相关的数据。 |
| Redis | 支持多种数据结构,如列表、字符串、集合、哈希等,以键值对的形式存储数据。 |
4.4 操作难度对比
| 数据库 | 操作难度 |
|---|---|
| IBM Cloudant | 操作相对复杂,需要了解 JSON 数据格式、索引创建和查询语法等。 |
| InfluxDB | 安装和配置过程相对繁琐,需要安装 Git 和 Go 等依赖,但提供了类 SQL 的查询语言,便于使用。 |
| Redis | 安装和使用简单,操作命令简洁,易于上手。 |
4.5 对比 mermaid 流程图
graph LR
A[适用场景] --> B[IBM Cloudant]
A --> C[InfluxDB]
A --> D[Redis]
E[性能] --> B
E --> C
E --> D
F[数据模型] --> B
F --> C
F --> D
G[操作难度] --> B
G --> C
G --> D
5. 选择合适数据库的建议
5.1 根据数据类型选择
- JSON 数据和多结构数据 :如果你的数据主要是 JSON 格式,并且需要处理多结构数据,那么 IBM Cloudant 是一个不错的选择。它支持 JSON 数据存储和灵活的模式修改,能够轻松处理各种复杂的数据结构。
- 时间序列数据 :对于时间序列数据,如物联网传感器数据、日志数据等,InfluxDB 是专门为此设计的。它的 TSM 引擎能够高效地存储和查询时间相关的数据,提供了类 SQL 的查询语言,方便进行数据分析。
- 键值对和数据结构存储 :如果你的应用主要需要存储键值对,并且需要支持多种数据结构,如列表、集合、哈希等,那么 Redis 是首选。它的内存存储方式保证了高速的读写性能,适用于缓存、消息队列等场景。
5.2 根据性能需求选择
- 高速读写和缓存 :如果你的应用对读写性能要求极高,需要处理大量的并发请求,那么 Redis 是最佳选择。它将数据存储在内存中,能够在毫秒级的时间内完成读写操作,非常适合作为缓存使用。
- 大量数据写入和查询 :如果你的应用需要处理大量的数据写入和查询,并且对数据的实时性要求较高,那么 InfluxDB 能够满足你的需求。它的 TSM 引擎能够高效地处理数据的摄取和存储,同时提供了快速的查询功能。
- 复杂查询和地理空间功能 :如果你的应用需要进行复杂的查询操作,如全文搜索、地理空间分析等,那么 IBM Cloudant 提供了相应的功能。它的索引类型和查询语法能够满足复杂的业务需求。
5.3 根据操作难度选择
- 简单易用 :如果你希望数据库的安装和使用过程简单,操作命令简洁,那么 Redis 是最容易上手的。它的安装过程简单,操作命令易于理解,适合初学者和快速开发场景。
- 有一定技术基础 :如果你的团队有一定的技术基础,能够处理复杂的安装和配置过程,并且熟悉类 SQL 的查询语言,那么 InfluxDB 是一个不错的选择。虽然它的安装过程相对繁琐,但提供了强大的时间序列数据处理能力。
- 熟悉 JSON 和数据库操作 :如果你的团队熟悉 JSON 数据格式和数据库操作,能够处理复杂的查询和索引创建,那么 IBM Cloudant 能够满足你的需求。它的功能丰富,但操作相对复杂,需要一定的学习成本。
选择建议 mermaid 流程图
graph LR
A[数据类型] --> B{选择数据库}
C[性能需求] --> B
D[操作难度] --> B
B --> E[IBM Cloudant]
B --> F[InfluxDB]
B --> G[Redis]
6. 总结
本文全面介绍了 IBM Cloudant、InfluxDB 和 Redis 这三款常见 NoSQL 数据库的特点、功能、操作步骤,并进行了详细的对比分析。通过了解它们的适用场景、性能、数据模型和操作难度等方面的差异,你可以根据自己的具体需求选择合适的数据库。
在实际应用中,需要综合考虑数据类型、性能需求和操作难度等因素,做出明智的选择。同时,建议在选择数据库之前,进行充分的测试和评估,以确保所选数据库能够满足业务的需求。希望本文能够为你在选择和使用 NoSQL 数据库时提供有价值的参考。
超级会员免费看
2238

被折叠的 条评论
为什么被折叠?



