我有一个离子3 PouchDB应用程序适用于某些Android设备(例如4.4和5.0)但不能用于其他设备(例如7.0.1)。它适用于所有iPhone!我怀疑这是因为某些Android版本将Webview数据库的数量限制为每个应用程序一个。
我已经读过,可以通过使用SQLite来解决这个问题,但是SQLite要慢得多,而且对于包含图像的DB文档(我有),速度特别慢。所以我想看看将我的两个CouchDB数据库复制到一个PouchDB数据库。
我有几个问题:
localDB.replicate.from(remoteDB)
。2017-1
和2017-12
的文档。如果我将两个数据库复制到一个PouchDB,他们必须有唯一的ID?如果不是,我将如何区分?答案 0 :(得分:1)
是的,您可以根据需要将任意数量的dbs复制到数据库中,但是当复制到一个数据库中时,具有相同ID的文档应该变为"eventual conflicts",因此一个文档将丢失并且只能在通过明确请求冲突来合并数据库。
使用非随机ID时,您应至少更新一个dbs以使用唯一的命名空间,例如Event-2017-01
。如果要使用仍然分离的远程dbs实现双向复制,这还将简化您需要的复制过滤器。
我通常会在文档的附件中添加一个带有前缀的单独文档,即attachment-[orig_id]
,以便可以从复制中过滤媒体。您可能需要考虑以这种方式解析附件(对于至少一个dbs),以便您可以在一个"媒体"中混合所有附件。 db具有给定客户端的理想适配器,并使用其他适配器来处理普通文档。
例如,你可能有:
mdb = new Pouchdb('media', {adapter:'idb'}).
replicate.from('http...news', {filter:'_view', view:'mediadocs'}).
replicate.from('http...events', ...filter...);
news = new Pouchdb('news', {adapter:'websql'}).
replicate.from('http...news', {filter:'_view', view:'normaldocs'});
events = new Pouchdb('events', {adapter:'websql'}).
replicate.from('http...events', {filter:'_view', view:'normaldocs'});
如果带有媒体的字段被拆分为另一个基于原始文档的文档,那么您还没有冗余副本..但是,您可以构建从新闻和事件中提供的临时dbs:
today = new Pouchdb('today', {adapter:'memory'}).
replicate.from(news, {selector ..dayview..}).
replicate.from(events, ...selector...);
临时数据库使用相对较少的资源,但其文档充当相应媒体数据库文档的索引。