考虑 Nosql 数据库的以下场景:
假设一条记录从一个表中删除并插入到另一个表中。对于这种情况,必须采取哪些预防措施或错误检查?这是交易的一个例子,意味着两个步骤都应该发生还是都不发生?
您描述的插入和删除是完全不同的操作。由于所有 NOSQL 数据库都不同,这实际上取决于您要使用的特定数据库是否支持事务。
如果不支持事务,您必须采取的基本预防措施类似于所有需要日志/事务的系统:
查看事务处理方法和 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
如果您的 nosql 数据库不支持事务,您可以在自己的代码中编写与数据库交互的事务逻辑。但是,对数据库的所有命令都必须通过您的 web 服务/API,并且您必须为命令历史记录、锁定等实现代码,这不是一项小任务。
所有通信都必须通过您的 web 服务/servlet 等,因为您需要控制不对当前处于事务中的文档/记录进行更改。
这基本上意味着成为开源 nosql 数据库的贡献者。