
174
|
第
10
章
集合中的每个对象都不需要具有相同的格式。
关于这种灵活性,不可避免的代价是应用程序有责任解析它读取的数据的结构,需要将
数据对象与元数据(用于解析结构,基本上是字段名称)一起存储在数据库中。你经常
会看到这两种方法,即写时模式(
schema-on-write
,定义模式)和读时模式(
schema-on-
read
,无模式)。
10.3.2
查询语言
NoSQL
数据库查询语言几乎总是特定数据库专有的,并且与基于显式
API
和类似
SQL
的声明性语言有所不同。由供应商和第三方实现的支持不同语言的客户端库可供应用
程序使用。例如,
MongoDB
官方支持针对不同语言的
12
个客户端库(
https://oreil.
ly/1xJfN
),并且还有更多的第三方产品(
https://oreil.ly/GxWb2
)。
键值数据库可能只提供支持基于单个键值的
CRUD
操作的
API
。文档数据库通常支持单
个文档字段的索引。这使得检索结果集和更新文档等查询能够高效实现,并满足不同的
文档搜索标准。例如,以下是一个
MongoDB
查询,它从滑雪者数据库文档集合中检索
所有
16
岁以上未更新滑雪通行证的个人:
db.skiers.find( {
age: { $gt: 16},
renew: { $exists: false }}
)
列存储数据库具有多种查询功能。
HBase
支持
Java CRUD API
(
https://oreil.ly/VwMCo
),
使用过滤器检索结果集。
CQL
(
Cassandra
查询语言)以
SQL