@budibase/pouchdb-replication-stream

中文文档
1.2.11发布于 2024/06/05Apache-2.0CommonJS近 30 天下载 3.9万

PouchDB/ CouchDB 作为流复制

中文使用文档
文档目录18 节
  1. 工具套装
  2. 实例
  3. 使用量
  4. API 密码
  5. db.dump( 流 [, 选择 )
  6. db. 负荷( 流)
  7. 设计
  8. 安装
  9. 没有垃圾文件直接流出
  10. 倾倒到字符串
  11. 已知的陷阱
  12. 读取错误 400 EconnRESET
  13. 试图加速PouchDB复制?
  14. 大楼
  15. 测试
  16. 在节点
  17. 在浏览器中
  18. 自动浏览器测试

PouchDB 复制流

Build Status

ReadableStreams 和 WritableStreams 用于PouchDB/CouchDB复制.

基本上,你可以复制两个数据库, 只需把溪流连接起来.

这有许多用途:

  1. 将数据库丢入文件,然后将同一文件加载到另一个数据库.
  2. 通过将 CouchDB 的内容倾倒到 HTTP 端点来快速地进行初始复制,然后在浏览器中被装入 PouchDB .
  3. 在网络套接字上复制吗 ? 蓝牙? 为了NFC? 为什么不呢? 由于复制流只是JSON平版文字,你可以通过任何传输机制发送.
  4. 定期备份您的数据库.

工具套装

实例

你用得着 pouchdb-replication-stream 将:

使用量

我们假设你有两个数据库 不论他们是偏僻的还是本地的:

var db1 = new PouchDB('mydb');
var db2 = new PouchDB('http://localhost:5984/mydb');

让我们将 db1 的全部内容丢弃到一个使用 dump()数字 :

var ws = fs.createWriteStream('output.txt');

db1.dump(ws).then(function (res) {
  // res should be {ok: true}
});

现在,让我们把文件读到另一个数据库,使用 load()数字 :

var rs = fs.createReadStream('output.txt');

db2.load(rs).then(function (res) {
  // res should be {ok: true}
});

恭喜,你的数据库正在同步 和以前一样

db1.replicate.to(db2);

API 密码

db.dump( 流 [, 选择 )

丢弃 db 改为 stream 用给定的 opts返回承诺.

这个 opts 直接传递给 replicate() API 密码 如本文所述。特别是,您可能想要设定:

  • batch_size - 每个输出块中要堆放多少文件。 默认为50.
  • since - 那个 seq 从那里开始读取变化.

允许您通过的选择有: batch_size, (中文(简体) ), batches_limit, (中文(简体) ), filter, (中文(简体) ), doc_ids, (中文(简体) ), query_params, (中文(简体) ), since,以及 view。 。 。 .

db. 负荷( 流)

从给定的装入更改 stream 输入 db返回承诺.

这是一种"同能"操作,所以可以多次调用,不会改变结果.

使用时警告 pouchdb-load

这个 邮袋装入量 插件有自己的 db.load() 函数,与此函数不相容。 如果您想要在同一时间使用两个插件 时间,那么你需要做:

var PouchDB = require('pouchdb');
var load = require('pouchdb-load');
PouchDB.plugin({
  loadIt: load.load
});
// Then load `pouchdb-replication-stream` normally

这样你就可以用 pouchdb-load 通过 db.loadIt(),不会打出 db.load() 从此插件。 (您必须使用浏览/ Webpack, 因为没有预建) loadIt() 版本. )

设计

复制流是这样的:

{"version":"0.1.0","db_type":"leveldb","start_time":"2014-09-07T21:31:01.527Z","db_info":{"doc_count":3,"update_seq":3,"db_name":"testdb"}}
{"docs":[{"_id":"doc1","_rev":"1-x","_revisions":{"start":1,"ids":["x"]},"foo":"bar"}]}
{"docs":[{"_id":"doc2","_rev":"1-y","_revisions":{"start":1,"ids":["y"]},"foo":"baz"}]}
{"docs":[{"_id":"doc3","_rev":"1-z","_revisions":{"start":1,"ids":["z"]},"foo":"quux"}]}
{"seq":3}

只是NDJ - Newline Delimited JSON(英语:Newline Delimited JSON). 每行都是要装入目标数据库(使用 bulkDocs() 与 {new_edits: false}) (中文(简体) ).

第一行是包含一些基本信息的头条,比如数据库中的文档数量和复制流协议版本. 这些信息对显示进程栏很有用 load() 进程,或用于处理后期版本,以防协议发生变化.

此复制流是 专有,意思是,你可以将它加载到目标数据库中 任何次数,它会像你只做过一次一样.

在结尾 load() 目标数据库将完全按照从源数据库复制的方式运作。 修订散列、冲突、附件和文件内容均忠实地运输.

一些行可能包含 seqs;这些用作检查站。 这个 seq 直行表示,“当您已经装入所有前列文件时,您现在正在更新 seq seq""("史记")

目前,附件只是作为基数64编码字符串,ala CouchDB的 _all_docs 与 attachments=true 财务报告和审定财务报表 Accept: application/json。 。 。 .

安装

要使用此插件, 请从 dist 文件夹并包含在 pouchdb.js 在 HTML 页面中:

<script src="pouchdb.js"></script>
<script src="pouchdb.replication-stream.js"></script>

您也可以使用 Bower :

bower install pouchdb-replication-stream

或者在Node.js中使用,只是npm安装:

npm install pouchdb-replication-stream

在Node.js,你可以把它附在 PouchDB 对象使用下列代码:

var PouchDB = require('pouchdb');
var replicationStream = require('pouchdb-replication-stream');

PouchDB.plugin(replicationStream.plugin);
PouchDB.adapter('writableStream', replicationStream.adapters.writableStream);

没有垃圾文件直接流出

在节点.js或与 Browserify,你可以使用一个 MemoryStream 直接流出而不向文件倾斜。 举个例子:

var Promise = require('bluebird');
var PouchDB = require('pouchdb');
var replicationStream = require('pouchdb-replication-stream');
var MemoryStream = require('memorystream');

PouchDB.plugin(replicationStream.plugin);
PouchDB.adapter('writableStream', replicationStream.adapters.writableStream);
var stream = new MemoryStream();

var source = new PouchDB('http://localhost:5984/source_db');
var dest = new PouchDB('local_destination');

Promise.all([
  source.dump(stream),
  dest.load(stream)
]).then(function () {
  console.log('Hooray the stream replication is complete!');
}).catch(function (err) {
  console.log('oh no an error', err);
});

如果您正在使用此程序, 此程序也会在浏览器中工作 浏览器。 。 。 .

如果你不使用浏览器, 你可以下载 MemoryStream 从 https://wzrd.in/standone/memorystream@latest 互联网档案馆的存檔,存档日期2013-12-21 并将作为 window.memorystream。 。 。 .

示例

<script src="lib/pouchdb/dist/pouchdb.js"></script>
<script src="lib/pouchdb-replication-stream/dist/pouchdb.replication-stream.js"></script>
<script src="lib/memorystream/memorystream.js"></script>
var localDB = new PouchDB('foo');
var remoteDB = new PouchDB('bar');

var source = new PouchDB('http://localhost:5984/source_db');
var dest = new PouchDB('local_destination');

Promise.all([
  source.dump(stream),
  dest.load(stream)
]).then(function () {
  console.log('Hooray the stream replication is complete!');
}).catch(function (err) {
  console.log('oh no an error', err);
});

倾倒到字符串

你用得着 MemoryStream 全文 流并倾倒到字符串上.

示例

var PouchDB = require('pouchdb');
var replicationStream = require('pouchdb-replication-stream');
var MemoryStream = require('memorystream');

PouchDB.plugin(replicationStream.plugin);
PouchDB.adapter('writableStream', replicationStream.adapters.writableStream);

var dumpedString = '';
var stream = new MemoryStream();
stream.on('data', function(chunk) {
  dumpedString += chunk.toString();
});

var db = new PouchDB('my_db');

db.dump(stream).then(function () {
  console.log('Yay, I have a dumpedString: ' + dumpedString);
}).catch(function (err) {
  console.log('oh no an error', err);
});

这将在浏览器通过 浏览器。 。 。 .

如果你不使用浏览器, 你可以下载 MemoryStream 从 https://wzrd.in/standone/memorystream@latest 互联网档案馆的存檔,存档日期2013-12-21 并将作为 window.memorystream。 。 。 .

示例

<script src="lib/pouchdb/dist/pouchdb.js"></script>
<script src="lib/pouchdb-replication-stream/dist/pouchdb.replication-stream.js"></script>
<script src="lib/memorystream/memorystream.js"></script>
var db = new PouchDB('my_db');

var MemoryStream = window.MemoryStream;

var dumpedString = '';
stream.on('data', function(chunk) {
  dumpedString += chunk.toString();
});

db.dump(stream).then(function () {
  console.log('Yay, I have a dumpedString: ' + dumpedString);
}).catch(function (err) {
  console.log('oh no an error', err);
});

已知的陷阱

读取错误 400 EconnRESET

基本上这意味着您的 CouchDB 无法处理所有同时发生的请求 。 最可能的原因是 您的一份文件上有200+附件 .

绕过这个错误的一个简单方法就是限制全球代理 maxSockets , 该程序管理协议 http 请求的最大数量 .

require('http').globalAgent.maxSockets = 25;

试图加速PouchDB复制?

如果您在浏览器中使用了这个库,那么它不会加速复制. 整点是将 HTTP 请求的数量缩入一个流中,然后向客户端发送一个大块。 如果您在客户端使用它,那么它仍然会向服务器提出许多小请求,这很慢.

您可能想要的是使用这个库服务器侧, 在一个节点. js 进程中 。 一个很好的例子,见快递包装: 特快邮袋-复制-流。 。 。 .

大楼

npm install
npm run build

您的插件现在位于 dist/pouchdb.mypluginname.js 财务报告和审定财务报表 dist/pouchdb.mypluginname.min.js 并准备分发.

测试

在节点

这将使用 LevelDB 运行节点测试 :

npm test

您也可以使用 :

npm run coverage

如果您不喜欢覆盖结果, 将值从 100 更改为其它 package.json,或添加 /*istanbul ignore */ 评论.

如果你在全球安装了Mocha,可以使用:

TEST_DB=local mocha --reporter spec --grep search_phrase

这个 TEST_DB 环境变量指定 PouchDB 应使用的数据库(见 package.json) (中文(简体) ).

在浏览器中

运行 npm run dev 然后指向您最喜欢的浏览器 http://127.0.0.1:8001/test/index.html (中文(简体) )。 。 。 .

查询参数 ?grep=mysearch 将搜索匹配的测试 mysearch。 。 。 .

自动浏览器测试

你可以运行例如.

CLIENT=selenium:firefox npm test
CLIENT=selenium:phantomjs npm test

这将自动运行测试,完成后进程会以0或1退出. Firefox使用索引DB,而PhantomJS使用WebSQL.

版本与发布记录

@budibase/pouchdb-replication-stream 共发布 2 个版本,首次发布于 2023/02/07;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.2.11latest2024/06/052 年前
1.2.102023/02/073 年前

关于 @budibase/pouchdb-replication-stream 的常见问题

@budibase/pouchdb-replication-stream 是什么?

PouchDB/ CouchDB 作为流复制

如何安装 @budibase/pouchdb-replication-stream?

在项目目录运行 npm install @budibase/pouchdb-replication-stream,或使用 pnpm add / yarn add / bun add。

@budibase/pouchdb-replication-stream 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/budibase__pouchdb-replication-stream 是否存在。

@budibase/pouchdb-replication-stream 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@budibase/pouchdb-replication-stream 可以商用吗?

@budibase/pouchdb-replication-stream 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@budibase/pouchdb-replication-stream 的下载量有多少?

根据 npm 官方下载统计,@budibase/pouchdb-replication-stream 在 2026/10/09 – 2026/11/07 这 30 天内被下载 38,766 次,日均约 1,292 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@budibase/pouchdb-replication-stream 还在维护吗?

最新版本 1.2.11 发布于 2024/06/05(2 年前);至今共发布 2 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/02/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。