【问题标题】:Deletion and Insertion in NoSQL databaseNoSQL 数据库中的删除和插入
【发布时间】:2013-04-13 16:20:25
【问题描述】:

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

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

【问题讨论】:

  • 您指的是具体操作还是新记录/文档的删除和添加。

标签: database nosql


【解决方案1】:

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

注意事项

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

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

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

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

所以如果你想拥有一个

MoveDocument(Document document, Database TargetDatabase)

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

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

利用这些来保证两个操作都进行。这取决于您的数据库是否支持事务。不幸的是,CouchDB 没有:Can I do transactions and locks in CouchDB?

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多