我想运行修改数据的测试,断言更改正确无误,然后回滚更改。按照典型的数据库说法,这称为启动事务,然后回滚。
我受MySql的限制,因为应用程序代码使用事务,因此测试无法进一步封装应用程序在事务中的更改。
如果我切换到HBase(我还有其他考虑因素,例如规模),我可以这样做吗?这是一种不确定向Google寻求什么的情况。
答案 0 :(得分:1)
首先,很少有数据库支持真正的嵌套事务。但是,MySQL和Postgres都支持SAVEPOINT
,可用于完成您要尝试执行的操作。如果您正在使用ORM之类的rails;它应该已经能够处理这种用例。
HBase中的交易
Apache HBase不支持常规意义上的事务,即它不提供启动和回滚操作的能力。HBase提供的唯一事务保证是:
我的建议是,对NoSQL数据库的期望不要与对关系数据库的期望相似。 HBase擅长处理数十PB的数据,以进行大量的点更新,点读取和范围扫描。但是,与管理MySQL实例相比,管理HBase群集要涉及更多的任务。在迁移到HBase时,您需要删除对关系数据库的许多要求。
也就是说,您尝试执行的操作有多种解决方法,根据您的确切设置,这些方法可能会起作用,也可能不会起作用。您可以在每次测试开始之前清理整个数据库/表。
解决此问题的另一种方法是在HBase之上使用另一个提供类似SQL语义的引擎。 Apache Phoenix是一个这样的项目,它拥有非常活跃的开发人员社区。他们已经在最新版本中推出了跨行事务支持(该支持仍处于beta中,当然,这里也没有嵌套事务)。