我正在认真考虑将来构建每个POC和应用程序的Meteor框架......但是,由于我很少使用需要这种合规性的多文档原子事务,因此无法使用符合ACID标准的数据库。
Meteor目前强烈依赖MongoDB语法和存储引擎(这意味着没有“Transaction”相关语法可用......)
我目前正在评估任何允许此ACID功能的解决方案:
这3个解决方案是Meteor路线图的良好候选者,如here
所示这些解决方案的优缺点是什么?哪个是最先进的? 在将数据存储在类似ACID的数据库的NoSQL中时,你会考虑将Meteor作为一种解决方案来保留Meteor吗?
答案 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)
我终于结下了自己的结论......
我将拥有两个平台:
任何评论仍然非常受欢迎,将予以考虑和回答