根据我的理解,离线第一个应用程序需要一种方法来判断用户是否已连接; 如果没有,它会在本地存储更改并在线时与远程服务器同步.
我发现使用Web应用程序执行此操作的方法是在客户端上使用pouchdb与连接到couchdb数据库的api进行通信.或者使用Firebase.
是否可以使用React-Native具有类似的功能?也许通过使用pouchdb-async-storage适配器.还有其他替代方案可用于本地远程数据同步吗?
我们正致力于通过Electron提供基于Web和跨平台桌面解决方案的应用程序.
由于客户的要求,桌面客户端无法利用"云"来存储数据; 所有数据都应存储在本地计算机中,或者更好的是,用户应该可以选择将数据库/数据文件保存在外部HDD上,以便同一本地网络上的另一个用户可以使用相同的数据文件.
我们一直在研究NeDB,PouchDB等,但所有这些都使用浏览器本身的Web SQL或IndexedDB来存储数据.从理论上讲,NeDB可以使用文件系统,但这似乎只适用于Node Webkit应用程序.
另一种选择当然是MongoDB,但它需要在Web服务器上设置站点.看看我们的用户如何在自己的机器上设置它,这将仅适用于一个用户,但会使他们很难共享数据(注意:假设用户几乎没有技术知识).
我们最好使用NoSQL数据库,但也会考虑基于文件的SQL数据库的选项.
我试图通过使用pouchDB使我的Web应用程序在脱机模式下工作.但我使用的后端数据库服务器是PostgreSQL(NoSQL).当我的应用程序重新上线时,我无法找到将我的PouchDB数据同步到postgreSQL的方法.任何人都可以请你知道如何做到这一点
所以我使用Ionic v2并使用Pouch进行移动开发,使用sqlite.来自REST API的数据包含以下内容:
{
"record-id": "2332255",
"record-name": "record-ABC-XTY",
"record-items": [
{
"item-id": "456454",
"item-name": "item-XADD",
"category": "Cat1",
"subcategory": "Subcat1",
"location": "LocationXYZ",
"owner": "Person1",
"data-rows": [
{
"row-name": "sampleRowName1",
"row-value": "ABC-XASS"
},
{
"row-name": "sampleRowName2",
"row-value": "ABC-XASS"
}
]
},
{
"item-id": "654645",
"item-name": "item-BNSSA",
"category": "Cat2",
"subcategory": "Subcat2",
"location": "LocationABC",
"owner": "Person2",
"data-rows": [
{
"row-name": "sampleRowName1",
"row-value": "ABC-XASS"
},
{
"row-name": "sampleRowName2",
"row-value": "ABC-XASS"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在您可以看到,记录项可能包含100,000个或更多项(est json大小:32mb).现在我迷失了我应该采取的方法.优化的数据处理至关重要,我不知道PouchDB方法更好.以下是我的一些想法.
此外,还将进行排序,获取所有数据(仅显示_ids和几个字段以显示所有结果的列表)和搜索.
PouchDB最佳实践建议是使用PUT而不是POST创建新文档(类似于rdbms中的行),主要是因为后者生成随机ID,这使得后续数据排序效率低下.PUT另一方面,需要提供用户生成的唯一ID.
我有点困惑PouchDB似乎没有提供开箱即用的功能.那么,生成唯一的顺序ID(类似于PostgreSQL的序列)的最佳方法是什么?我可以使用类似的东西maxID,但在我看来,主要问题是确保在我确定maxID和实际成功插入记录之间没有其他人插入记录.
建议?
目前我正在尝试使用localStorage存储大量相同类型的对象,我感到有些困惑.
一种思维方式是将所有对象存储在数组中.但是对于单个对象的每次读/写,我需要对整个数组进行反序列化/序列化.
另一种方法是将每个对象的密钥直接存储在localStorage中.这将使访问每个对象变得更容易,但我担心将存储的对象数量(数万).此外,获取所有对象将需要迭代整个localStorage!
我想知道哪种方式会更好?是否值得尝试更复杂的客户端数据库,如PouchDB?
我正在开发离子框架中的应用程序并使用MongoDB作为数据库.我想在离线工作我的应用程序并将数据同步到我的数据库.我发现PouchDB可用作本地存储并与CouchDB同步.但我也发现,没有办法将PouchDB与MongoDB同步.是否还有其他本地存储可以脱机工作并与MongoDB同步?
我NgModule在Ionic 2移动应用程序中有一个Angular 2 ,定义如下:
@NgModule({
declarations: [
MyApp,
HomePage,
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
],
providers: [{provide: ErrorHandler, useClass: IonicErrorHandler}, VatRatesDbService]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
并以这种方式定义服务:
import { Injectable } from '@angular/core';
import * as PouchDB from 'pouchdb';
@Injectable()
export class VatRatesDbService {
private _db;
private constructor() {
this._db = new PouchDB('rates.db', { adapter: 'websql' });
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我在运行时收到以下错误:
类型'typeof VatRatesDbService'不能分配给'FactoryProvider'类型.'typeof VatRatesDbService'类型中缺少属性'provide'.
最近Android Chrome的IndexedDB配额管理有变化吗?我在Ionic 3 Cordova应用程序中使用带有适配器IndexedDB的PouchDB.在过去的6个月里,它进展顺利.但是在过去的5天内,我收到的关于数据未在应用中正确加载的投诉显着增加.我的应用只需要3-4 MB的数据.这是我目前所知道的:
我还怀疑也许人们在最后几天拍摄了更多的照片,因为天气非常好,导致可用磁盘空间减少,因此报告的错误数量激增.但我仍然觉得这是一个奇怪的解释.
其他人在他们的应用中发现了类似的问题 除了切换到Cordova-SQLite之外的任何解决方案?
更新2018-05-03:
我想了几件事:
drivers为Ionic的存储:driverOrder: ['localstorage', 'indexeddb', 'sqlite', 'websql']