【问题标题】:Any way to get Meteor using a native ACID compliant db?有什么方法可以使用符合本机 ACID 的数据库来获取 Meteor?
【发布时间】:2015-03-30 14:31:47
【问题描述】:

我正在认真考虑在未来构建每个 POC 和应用程序的 Meteor 框架......但是,我无法使用符合 ACID 的数据库,因为我很少使用需要这种合规性的多文档原子事务。

Meteor 目前强烈依赖 MongoDB 语法和存储引擎(这意味着没有可用的“Transaction”相关语法...)

我目前正在评估任何允许这种 ACID 功能的解决方案:

  • 为 Meteor 使用 MySQL 本机驱动程序(与 MongoDB 不同的语法?)
  • 为 Meteor 使用 PostgreSQL 本机驱动程序(SQL 语法)
  • 使用 TokuMX(符合 ACID 的 MongoDB 分支...与需要添加的事务相关命令中的 MongoDB appart 语法相同)

这 3 个解决方案非常适合 Meteor 路线图,如 here 所示

这些解决方案有什么优点/缺点?哪个是最先进的? 虽然您会考虑作为一种解决方案来保留 Meteor,同时将文档存储在符合 ACID 的 NoSQL 数据库中?

【问题讨论】:

    标签: postgresql meteor transactions acid tokumx


    【解决方案1】:

    sqlAndMeteor

    如果你和我一样,你喜欢 Meteor 但讨厌 Mongo。在 Meteor 的 Trello 路线图 (https://trello.com/b/hjBDflxp/meteor-roadmap) 中,投票最多的功能是 SQL 支持,无论是 PostgreSQL 还是 MySQL。

    由于 Meteor 中没有日期,我在这里总结一下我找到的部分解决方案。

    1.- 仅将 SQL 用于客户端查询。

    让我们面对现实吧,Mongo 不擅长普通的数据操作,因此能够使用 SQL 来查询数据(使用 JOINS、GRUP BY 等)会减轻很多痛苦。有一些包可以让您在客户端中使用 SQL,至少用于查询:最简单的是旧的 (2010) 实用程序 SqlLike (http://www.thomasfrank.se/sqlike.html)。镇上的新玩家是由@agershun (https://github.com/agershun/alasql) 积极开发的alaSQL。 SqlLike 的优点是它只有 10k。当然,AlaSQL 功能要强大得多,但是对于在联合和聚合中使用 SQL 替换 mongo sintax,SqlLike 是可以的。

    你可以在你的助手中做这样的事情:

    productsSold:function(){
      var customerSalesHistory=salesHistory.find({cutomerId:Session.get('currentCustomer')}).fetch();
      var items=products.find().fetch();
      return alasql("select item.name, sales.ordered as sumaVentas from ? sales, ? items
          where items.Id=sales.itemId",[customerSalesHistory,items]);
    }
    

    2.- 试验直接 SQL 支持。

    一些包试图用 MySql 或 PostgreSQL 替换 Mongo(和 minimongo)。 @numtel 的 MySql 包是 Meteor-MySql https://github.com/numtel/meteor-mysql,PostgreSQL 是 Meteor-pg (https://github.com/numtel/meteor-pg)。两者都是解决问题的好尝试,但还存在一些问题,而且适应起来有点麻烦。

    来自 Hack Reactor 的团队组建了 Meteor Stream,其第一个产品是 PostgreSql 与 Meteor 的集成,meteor-postgres (https://github.com/meteor-stream/meteor-postgres)。看起来很不错,在客户端用alaSql代替minimongo。

    这两种方法都不错,但也存在一些问题:

    他们破坏了流星的部署。 他们非常非常年轻,还没有准备好生产AFAIK 它们仍然需要对我们习惯使用的通常的 pub-sub sintax 进行调整,这可能会引发与其他流星包的兼容性问题。 3.- 仍然使用 Mongo,但作为 MySql 数据库的简单存储库。

    此选项保留 Meteor 的所有特性,并使用 Mongo 作为 MySql 或 PostgreSql 数据库的临时存储库。

    @perak (https://github.com/perak/mysql-shadow) 的 mysql-shadow 是一个绝妙的尝试。它按照它说的做,让 Mongo 与 MySql 双向同步,让您在 MySql 中处理数据。

    坏消息是,开发人员不会继续维护它,但所做的足以应付简单的场景,您没有复杂的触发器来更新其他表或类似的东西。

    对于功能齐全的同步,您可以使用 SymmetricsDS (http://www.symmetricds.org),这是一个经过良好测试的数据库复制器。当然,这涉及到设置一个新的 java 服务器,但到目前为止,这是确保您能够将 Mongo 数据库转换为真实 MySql、PostgreSQL、SQL Server、Informix 数据库的简单存储库的最佳方法。我还得自己检查一下。

    目前 MySQL Shadow 似乎是一个足够好的解决方案。

    这种方法的一个优点是您仍然可以使用所有标准的 Meteor 功能、包、meteor 部署等。除了设置同步机制外,您无需执行任何操作,而且您不会破坏任何东西。

    此外,如果有一天 Meteor 团队使用了 SQL 集成中筹集的一些资金,您的应用更有可能按原样运行。

    【讨论】:

    • Meteor-pg :我认为这是我回答中的一个重要部分。 mysql-shadow : 因为 MySQL 被 Oracle 收购了...我认为它已经死了 SymmetricsDS : 对于我的使用来说太年轻了 ==> 感谢您的长篇文章,我将发布我最终结论的答案
    • symmetricDS 自 2007 年以来一直存在。顺便说一句,您可能想使用像 pentaho 的 Kettle 这样的 etl 包,但似乎 symmetricds 更容易配置。
    • 看起来 symmetricDS 可能是在 MongoDB 和 PostgreSQL 之间复制数据的不错选择……因为它可以作为经典 WAR 包部署在我的 JAVA SOA 平台中。谢谢维克多!
    • 如果我的回答有用请点赞 :) 最好的问候!
    【解决方案2】:

    如果 MySQL 适合你,我使用了 meteor-mysql 包,它运行良好。

    【讨论】:

    • 事实上,自从 MySQL 成为 Oracle 资产后,我看不到它有任何未来......但 meteor-mysql 包看起来是一个不错的候选者。
    【解决方案3】:

    我终于得出了自己的结论……

    我将拥有两个平台:

    • 一个 Meteor 前端,业务数据在 PostgreSQL 中,一些前端数据或易于复制的数据在 MongoDB 中
    • Java 数据后端(仅限 server2server)处理我在 PostgreSQL 中的业务数据的所有原子操作...加上技术适配器(SAP、Salesforce)、BPMN 2.0 工作流引擎(Actility)以及其他系统所需的任何已注册 SOA

    任何cmet还是很受欢迎的,都会考虑和回答

    【讨论】:

      猜你喜欢
      • 2012-02-21
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多