NoSQL数据库中的删除和插入

时间:2013-04-13 16:20:26

标签: database nosql

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

假设从一个表中删除记录并将其插入另一个表中。必须为此方案执行哪些预防措施或错误检查?这是一个交易的例子,意味着要么两个步骤都要发生,要么都不发生?

1 个答案:

答案 0 :(得分:1)

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

注意事项

如果不支持交易,您必须采取的基本预防措施与所有需要日记/交易的系统类似:

  1. 记录在事务中启动的所有操作员,以便在出现故障时可以回滚。
  2. 锁定事务中涉及的所有文档,以便其他进程/请求不会破坏状态。
  3. 查看事务处理方法和ACID标准: http://en.wikipedia.org/wiki/Transaction_processing#Methodology

    这实际上并不是一件小事,但对于诸如Move命令(不是整个交易系统)这样的小任务来说,它是可行的。

    所以,如果你想要一个

    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 DB中不支持事务,则可以在自己的代码中编写与数据库交互的事务逻辑。 但是,数据库的所有命令都必须通过您的webservice / API,您必须实现命令历史,锁等代码,这不是一项小任务。

    所有通信都必须通过您的webservice / servlet等,因为您需要控制当前正在进行交易的文档/记录的更改。

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

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