标签: couchdb

水平缩放是什么意思?

在数据库上下文中,我发现水平可扩展性是 NOSQL 数据库的优势之一。这个词是什么意思?

垂直缩放相比如何?

nosql terminology couchdb scalability

23
推荐指数
1
解决办法
2万
查看次数

CouchDB 与 MongoDB

评估面向文档的存储,CouchDB 与 MongoDB 的优缺点是什么?

nosql document-oriented mongodb couchdb

18
推荐指数
1
解决办法
1473
查看次数

数据库如何存储可变长度字段的索引键值(磁盘上)?

语境

这个问题与 SQL 和 NoSQL 数据库系统中索引的低级实现细节有关。索引的实际结构(B+ 树、哈希、SSTable 等)是无关紧要的,因为该问题特别与存储在任何这些实现​​的单个节点内的有关。

背景

在SQL(如MySQL的)和NoSQL(CouchDB的,MongoDB的,等等)数据库,如果您在列或数据的JSON文档字段建立索引,你实际上是导致数据库做的就是创建本质上所有的排序列表这些值以及与该值相关的记录所在的主数据文件中的文件偏移量。

(为简单起见,我可能会忽略特定实现的其他深奥细节)

简单的经典 SQL 示例

考虑一个标准 SQL 表,它有一个简单的 32 位 int 主键,我们将在其上创建索引,我们最终将在磁盘上得到一个整数键的索引,该索引已排序并与数据文件中的 64 位偏移量相关联,其中记录存在,例如:

id   | offset
--------------
1    | 1375
2    | 1413
3    | 1786
Run Code Online (Sandbox Code Playgroud)

索引中键的磁盘表示如下所示:

[4-bytes][8-bytes] --> 12 bytes for each indexed value
Run Code Online (Sandbox Code Playgroud)

坚持使用文件系统和数据库系统优化磁盘 I/O 的标准经验法则,假设您将密钥存储在磁盘上的 4KB 块中,这意味着:

4096 bytes / 12 bytes per key = 341 keys per block
Run Code Online (Sandbox Code Playgroud)

忽略索引的整体结构(B+ 树、哈希、排序列表等),我们一次将 341 个键的块读写到内存中,然后根据需要返回到磁盘。

示例查询

使用上一节中的信息,假设有一个查询“id=2”,经典的数据库索引查找如下:

  1. 读取索引的根(在本例中为 1 个块)
  2. 二分查找已排序的块以找到键
  3. 从值中获取数据文件偏移量
  4. 使用偏移量在数据文件中查找记录
  5. 将数据返回给调用者

问题设置... …

nosql index mongodb couchdb

16
推荐指数
1
解决办法
4388
查看次数

CouchDB 和文档版本控制

我目前正在使用 CouchDB 开发一个 wiki-esque 应用程序,并试图实现一个文档版本控制方案。在我看来,有两种方法可以做到这一点:

  1. 将每个版本存储为单独的文档
  2. 将旧版本存储为单个文档的附件。

现在,我有一种#1 的工作形式。当用户编辑文档并保存时,后端首先将之前的修订复制到新文档中,然后保存新版本。每个文档都有一个 'history' 数组,其中包含每个版本的数据(旧版本的文档 _id、时间戳、编辑器等)。

由于这个历史数组对于经常更新的文档来说可能会变得很长,我有一个视图可以在正常读取期间获取一个没有历史记录的文档(以及另一个用于获取历史记录的视图)。

我的问题是:我对我目前的方法感到不安,并一直在考虑改用“依恋”方法。但我不确定。我希望有人比我更了解 CouchDB(我只在这工作了几个星期——这是我第一个使用 CouchDB 和 NoSQL 的项目)可以告诉我每个项目的优缺点方法。或者是否还有其他一些我忽略的版本控制方案?

database-design couchdb

12
推荐指数
1
解决办法
3060
查看次数

如何处理 CouchDB 中的“参考表”?

处理“参考表”(包含静态数据的表,例如包含各种食物成分的列表)的最佳方法是什么?

  1. 多份文件,每种成分一份
  2. 每个参考文献一份

    { "_id" = "ingredients", "ingredient": [{ "name":"Apple", ... }] }

  3. 一份包含所有参考文献的文档

    { "_id" = "references", "ingredients": [{"id": "apple", "name": "Apple", ...}], "spices": [{"id": "cinnamon" , "name": "Cinnamon", ...}] }

nosql database-design best-practices couchdb

6
推荐指数
1
解决办法
1964
查看次数

停止正在运行的压缩进程

我需要在生产 CouchDB 实例上运行压缩,该实例之前可能没有运行过压缩。

如果压缩给 CouchDB 实例带来太多额外负载,是否可以安全地终止压缩进程?如果是这样,怎么办?

couchdb

5
推荐指数
1
解决办法
2151
查看次数

NoSQL、CouchDB 与 CouchBase,我该怎么办?

我开始在我的生产站点上遇到一些问题,当有一个网页需要加载一个非常大的 ResultSet(目前来自关系数据库,MySQL)时,它需要永远,而且这些结果集只会越来越大。

我开始寻求更好的解决方案,我遇到的是将数据保存在 NoSQL 数据库中的想法。(我已经在使用 Mongo,但由于我的环境中存在大量 DML,Mongo 效率低下。)因此,在网上搜索时,我考虑了以下 2 个选项:

  1. 沙发数据库
  2. 沙发基地

当查看以上两个时,我可以说两者都是基于 JSON 文档的(好吧,这是一个好的开始),但是当进入一些技术背景时,我确实在寻找更好的缓存(我不想杀死我的服务器的 I/O)然后是 MongoDB 的主-主复制能力(我看到 CouchDB 可以根据源->目标/目标->源轻松复制)。

有人可以向我提供您的一些意见,如果您尝试过上述解决方案,我将很高兴听到您的经验。

nosql database-recommendation memory couchdb couchbase

4
推荐指数
1
解决办法
8297
查看次数