有没有办法让Meteor使用原生的ACID兼容数据库?

时间:2015-03-30 14:31:47

标签: postgresql meteor transactions acid tokumx

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

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

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

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

这3个解决方案是Meteor路线图的良好候选者,如here

所示

这些解决方案的优缺点是什么?哪个是最先进的? 在将数据存储在类似ACID的数据库的NoSQL中时,你会考虑将Meteor作为一种解决方案来保留Meteor吗?

3 个答案:

答案 0 :(得分:2)

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)。镇上的新玩家是alaSQL,由@agershun(https://github.com/agershun/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服务器,但这是确保您能够在真正的MySql,PostgreSQL,SQL Server,Informix数据库的简单存储库中转换Mongo数据库的最佳方法。我必须自己检查一下。

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

这种方法的一个优点是您仍然可以使用所有标准Meteor功能,包,流星部署等。除了设置同步机制之外,你不必做任何事情,而且你没有破坏任何东西。

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

答案 1 :(得分:1)

如果MySQL适合您,我已经使用了meteor-mysql包,效果很好。

答案 2 :(得分:1)

我终于结下了自己的结论......

我将拥有两个平台:

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

任何评论仍然非常受欢迎,将予以考虑和回答