PouchDB:一个开源的 JS 数据库

栏目: 数据库 · 发布时间: 6年前

内容简介:PouchDB:一个开源的 JS 数据库

PouchDB是一个受Apache CouchDB启发的开源JavaScript数据库。可以完美运行在浏览器中。 

PouchDB设计的初衷是,帮助Web开发者构建能在本地离线运行的App,一如在线时运行的一样。 

它能让应用程序离线时存储数据,并在回到线上时与服务器兼容,同步数据,保持用户数据的同步。 

什么是PouchDB? 

PouchDB是CouchDB的JavaScript实现,目标是实现可以和CouchDB相媲美的API,可以在浏览器和Node.js运行。 

什么是CouchDB? 

CouchDB是由Damien Katz于2015年写的NoSQL数据库,现在由Apache软件基金会负责维护。如果你是一个JavaScript开发者,你可能每天都在用CouchDB,因为它的核心技术驱动着npm。 

Couchbase、CouchDB等都是什么? 

现在,有两个数据库的血缘可以追溯到CouchDB:Couchbase,和Cloudant。他们都是从CouchDB分离出来的产品。 

然而,这三种数据库都是使用了相同的CouchDBsync协议。这意味着PouchDB可与这三个数据库配合使用。 

换句话说,这些数据库像是电话运营商,而CouchDB同步协议是底层的基础技术。 

CouchDB的优势:HTTP和sync 

现在已经有这么多 SQL 、NoSQL数据库了:MongoDB、PostgreSQL、 MySQL 等。那么为什么我们选择实现CouchDB,而不是别的呢? 

CouchDB的优势有两点:HTTP和sync。 

HTTP:小而简单的协议 

当我们使用数据库时,经常需要在数据库和客户端的应用之间写类似转换层的东西,将数据库的查询语句转化成RESTful的HTTP调用。这些工作在编写的每一个App中被一次次开发重复着。 

CouchDB将我们拯救了出来!通过我们的客户端App,可以直接和数据库通讯。它使用HTTP作为主要的通讯方式,没有特殊的协议,没有特殊的驱动:只有REST和HTTP。你可以通过你的浏览器,curl或像Postman这样的REST客户端直接和CouchDB连接。 

换句话说,CouchDB是真正“为Web而生的数据库”。 

Sync:CouchDB的杀手级特性 

CouchDB另一个特性是,它从底向上都被设计成完全同步友好的数据库。 

举个例子,如果你担心客户端应用的潜在危险,你可以直接在欧洲设一个CouchDB,再在北美搞一个,亚洲搞一个。在这些数据库之间开启双向复制之后,客户端就可以使用其中任何一个。 

PouchDb使这一切都可以运行在你的浏览器里。 

讨论 

PaulMest:我已经使用PouchDB作为React Native应用的数据库6个月了,用 SQLite 数据库作为后端的存储,这样我们就可以使用设备更多的存储空间,而不只是50M。它工作得非常好,在一个离线缓存中维护数据,然后再同步到Digtal Ocean上的CouchDB 2.0。 让它在React native里工作非常有挑战性。让我们的系统跟上PouchDB的更新也非常有挑战性。实际上我们使用PouchDB 5.4.5,因为6.x版本中有breaking change,我还没有时间去搞明白哪里不兼容。PouchDB社区(尤其是Nolan lawson)非常活跃,给出示例、听取反馈回答问题等都非常积极。 

ojanik:我们已经在产品环境中使用PouchDB大约15个月了。当初选择它是因为这是一个绿色软件,它给了我们两个优势:简单的离线支持、实时同步功能,配合后端的程序很方便。因为这个东西实际上就是一个带有本地缓存的Web App,部署新版本非常简单。 

在架构方面,我们有大约有250个用户,每个都有独立的Couch数据库。我们还没有评估Couch 2.0,使用的还是Couch 1.6. 

然而,我们在使用的过程中,还是遇到了一些问题: 

载入时间问题。当你从0开始载入一个数据库时,非常耗时。初始化一个20-30M的数据库大约会花15-30分钟的时间,我们必须周期性地存储dump的文件,这样节省了一些时间。不过我觉得Couch2.0的同步协议已经解决了这个问题;

浏览器限制。当我们超过了浏览器的容量显示(通常是iOS的Safari,50M),我们就不得不采取一些具有创造性的做法。现在我们的方案是,为每一个客户运行两个数据库,一个是完整版本的数据库,另一个只存在7-8天。Pouch向后者同步数据。我们在完整数据库和临时数据库之间周期性地进行过滤复制。在客户端,如果一个客户需要7天之前的数据,就将Pouch切换到在线模式,作为一个库从在线数据库中取得数据;

处理冲突。因为CouchDB/PouchDB是分布式的,所以当用户基于相同的数据版本做了更新时,得当心冲突;

自定义后端逻辑。因为Pouch直接与Couch连接,所以不能在需要时完自定义后端逻辑。我们必须引入一个REST后台通道,以确保我们的后端在需要时运行额外的逻辑。

欢迎加入本站公开兴趣群

软件开发技术群

兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流

QQ群:26931708

Hadoop源代码研究群

兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop

QQ群:288410967 


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Little Typer

The Little Typer

Daniel P. Friedman、David Thrane Christiansen、Duane Bibby、Robert Harper、Conor Mcbride / MIT Press / 2018-10-16 / GBP 30.00

An introduction to dependent types, demonstrating the most beautiful aspects, one step at a time. A program's type describes its behavior. Dependent types are a first-class part of a language, and are......一起来看看 《The Little Typer》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试