0

考虑 Nosql 数据库的以下场景:

假设一条记录从一个表中删除并插入到另一个表中。对于这种情况,必须采取哪些预防措施或错误检查?这是交易的一个例子,意味着两个步骤都应该发生还是都不发生?

4

1 回答 1

1

您描述的插入和删除是完全不同的操作。由于所有 NOSQL 数据库都不同,这实际上取决于您要使用的特定数据库是否支持事务。

预防措施

如果不支持事务,您必须采取的基本预防措施类似于所有需要日志/事务的系统:

  1. 记录在事务中启动的所有运算符,以便在出现故障时回滚。
  2. 锁定交易中涉及的所有文件,这样其他进程/请求就不会破坏状态。

查看事务处理方法和 ACID 标准: http ://en.wikipedia.org/wiki/Transaction_processing#Methodology

这确实不是一件小事,尽管对于诸如移动命令(不是整个事务系统)之类的小任务是可行的。

所以如果你想拥有一个

MoveDocument(Document document, Database TargetDatabase)

您可以执行以下操作之一:

如果数据库支持事务...

利用这些来保证进行这两项操作。这取决于您的数据库是否支持事务。不幸的是,CouchDB 没有:我可以在 CouchDB 中进行事务和锁定吗?.

MangoDB 不支持事务,但它确实提供了一些事务功能: http ://docs.mongodb.org/manual/faq/fundamentals/#does-mongodb-support-transactions

在包装器 API 中实现您自己的事务逻辑

如果您的 nosql 数据库不支持事务,您可以在自己的代码中编写与数据库交互的事务逻辑。但是,对数据库的所有命令都必须通过您的 web 服务/API,并且您必须为命令历史记录、锁定等实现代码,这不是一项小任务。

所有通信都必须通过您的 web 服务/servlet 等,因为您需要控制不对当前处于事务中的文档/记录进行更改。

在数据库代码中实现您自己的

这基本上意味着成为开源 nosql 数据库的贡献者。

于 2013-04-13T16:39:10.707 回答