【问题标题】:Mobile app using PouchDB-CouchDB and MySQL使用 PouchDB-CouchDB 和 MySQL 的移动应用程序
【发布时间】:2014-07-24 22:34:41
【问题描述】:

我正在开发一个用 Cordova 封装的移动应用程序,它与我们基于 PHP 和 MySQL 的基于 Web 的应用程序一起运行。移动应用程序使用本地存储并通过已编写的服务层获取数据,以在移动应用程序和 MySQL 数据库之间交换数据。移动应用仅使用存储在主 MySQL 数据库中的数据子集。

我希望用 pouch DB 替换我的移动应用程序本地存储解决方案,并看到它需要 CouchDB ...这让我想到了一个潜在的配置/解决方案,我想知道它是否是可取的,并且可行的...

在主 MySQL 数据库和移动应用程序的 PouchDB 之间建立一个作为中介/从属运行的 CouchDB 数据库是否可行?移动服务层将使用此数据库(以及必要时的主 MySQL 数据库),主 SQL 和沙发数据库之间的数据更新通过 cron 定期推送。 CouchDB 只会存储 MySQL DB 中与移动应用相关的数据子集。

这个解决方案听起来是不是有点矫枉过正/一个好主意?有没有更好的方法来处理上述设置?我确实喜欢 pouchdb-CouchDB 的想法......但不想重写我的整个 web 应用程序以使用 couch-DB,而提供移动特定数据子集的额外抽象级别似乎很有用。

谢谢 追踪

【问题讨论】:

    标签: mysql mobile couchdb pouchdb


    【解决方案1】:

    在 Node 上运行的 PouchDB 实际上可以使用任何基于 LevelDOWN 的适配器,并且有一个用于 MySQL。我没有测试过。更多信息在这里:http://pouchdb.com/adapters.html#pouchdb_in_node_js

    但是,这可能不太适合您的用例,因为 PouchDB 将存储在 MySQL 中的数据将与您的应用程序当前在 MySQL 中使用的数据完全不同。为了支持复制,PouchDB 保存了每个文档的修订历史(想想 git),这与 MySQL 等传统数据库不同,后者只存储可以删除/插入/更新的表和行。 CouchDB 和 PouchDB 等数据库从头开始构建以支持复制,这就是存在此版本控制系统的原因。

    话虽如此,如果您在 MySQL 和 CouchDB 之间编写自己的同步层,理论上它可以工作,但工作量可能会很大,以至于您会失去 CouchDB 和 PouchDB 内置复制的好处。

    【讨论】:

    • 感谢您的回复。我想我会暂时推迟客户端重写,因为它正在工作并密切关注未来的解决方案。我从您的链接 (1) 中发现了一些有趣的读物,因此感谢您。 (1) 关于移动应用存储的好文章:html5rocks.com/en/tutorials/offline/quota-research
    【解决方案2】:

    我正在尝试使用我们的 ERP(基于 SQL Server)实现相同的架构。

    现在我只是想弄清楚手机上的 pouchdb 是否足以满足要求,例如:

    • 能够通过“产品描述”过滤给定的“价目表”。将 sql 中的 LIKE 视为 on:

      SELECT * FROM prices WHERE Description LIKE '%text%'

    • 能够按“产品类别”或“产品供应商”过滤给定的“价目表”

    此外,移动应用只需要完整 SQL 架构/数据的一个子集。我的想法是简化移动 pouchdb coouchdb 复制部分,这可能只是使用 webSQL SQL Server 具有挑战性),然后稍后通过一个过程将 coouchdb 上添加的数据“复制”到 SQL Server,想想一个 cron 任务。

    到目前为止,我发现:

    • 在客户端构建 pouchdb 视图可能需要很长时间才能构建,这只是为了能够执行 LIKE 操作的第一点。为了解决这个问题,我构建了一个辅助 websql db,它只包含 (pouchdb_id, pouchdb_text),我在复制后重建它,插入 pouch 键和连接的对象文本字段。然后,当我需要 LIKE 时,我在 webSQL 上进行操作,并使用 db.allDocs({ keys: [sql returned keys array] })

    • 使用 pouchdb 获取文档
    • 第二点是我现在的分析...

    目前正在进行分析,如有任何想法,欢迎分享。

    【讨论】:

    • 很抱歉视图构建缓慢。我们知道这是个问题,我们正在努力解决。
    • 嗨哈维尔这听起来完全像我正在尝试做的事情,很高兴听到还有其他人在尝试同样的事情。有很多基于关系数据库的大型 Web 应用程序可能需要移动应用程序,从而激发了对 sql - no-sql 集成的需求。我很惊讶地发现关于这个话题的信息如此之少。到目前为止,这些是我在该主题上找到的仅有的 2 个稍微有趣的链接。他们都使用“疯狂”这个词... (1)github.com/kesla/mysqldown (2)percona.com/live/mysql-conference-2012/sessions/…
    【解决方案3】:

    您可以使用以下NodeJS包https://www.npmjs.com/package/couchdb-to-mysql

    该包侦听 CouchDB 更改并将其反映在 MySQL 上。

    示例

    var converter = require('couchdb-to-mysql');
    var cvr = converter();
    cvr.connect();
    cvr.on('created', function (change) {
        // replicate changes on mysql     
    });
    

    方法

    var converter = require('couchdb-to-mysql')
    var cvr = converter(config={})
    Optionaly pass in a config:
    
    config.couch.host
    config.couch.port
    config.couch.database
    config.mySQL.host
    config.mySQL.port
    config.mySQL.user
    config.mySQL.password
    config.mySQL.database
    events
    cvr.on('created', function (change) {})
    Every time a document is created, a created event fires.
    
    cvr.on('updated', function (change) {})
    Every time a document is updated, a updated event fires.
    
    cvr.on('deleted', function (change) {})
    Every time a document is deleted, a deleted event fires.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-19
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多