2
A
回答
1
define transactions有多种方式,并且有各种方式来实现它们。交易的共同财产是它的ACID:
- 原子性 - 全有或全无。数据库事务的所有任务都必须完成;如果由于任何可能的原因而不完整,则数据库事务必须中止。
- 一致性 - 可串行性和完整性。在数据库事务之前和之后,数据库必须处于一致或合法的状态。这意味着数据库事务不能破坏数据库完整性约束。
- 隔离在执行数据库事务期间使用的数据在执行完成之前不能被其他数据库事务使用。因此,一个未完成事务的部分结果必须不能用于其他事务,直到事务成功提交。这也意味着事务的执行不受其他并发事务的数据库操作的影响。
- 耐用性即使交易完成后发生系统故障,交易的所有数据库修改都将永久生效。
事务可以有几种状态:
- 活动状态:它分为两个阶段。初始阶段:数据库事务处于此阶段,而其语句开始执行。部分承诺阶段:数据库事务在其最终语句执行时进入此阶段。在这个阶段,数据库事务已经完成了它的执行,但仍然有可能中止事务,因为执行的输出可能会暂时驻留在主内存中 - 硬件故障等事件可能会擦除输出。
- 失败状态:当数据库事务由于硬件或程序错误而无法继续正常执行时,将进入失败状态)。
- 中止状态:数据库事务如果由DBMS确定失败,则进入中止状态。被中止的事务对数据库不会产生任何影响,因此对数据库所做的任何更改都必须撤消或以技术术语回退。当中止的事务已被回滚时,数据库将返回到其一致状态。 DBMS的恢复方案负责管理事务中止。
- 承诺状态:在完成成功执行后,有足够的信息写入磁盘后,数据库事务进入提交状态。在这种状态下,如此多的信息被写入磁盘,交易产生的影响不能通过中止撤消;即使发生系统故障,当系统重新启动时,已提交事务所做的更改也可以重新创建。
LevelDB does not support transactions,但它确实有一些ACID属性:
- 批量写是原子。
- 一致性取决于你。
- 有限的隔离支持。
- 耐久性是一个可配置的选项。
所以......回到你的问题:
问:
什么会这层必须做的事务支持添加到较低级别的库,不支持交易?
答: 这取决于你如何定义一个事务。如果你用上述属性定义一个事务,并且如果你希望你的事务是ACID,那么你必须弄清楚是否可以用LevelDB(大多数ACID属性被集成),然后你必须在LevelDB上编写一个包装器,确保事务状态得到正确维护。但是,我不完全确定一个包装器本身会这样做,所以您可能不得不真正采用源代码并将其修改为支持事务处理的真正。
1
鉴于你的数据库是单线程的,你可以做到以下几点:
使用性LevelDB批处理功能:除了覆盖旧钥匙的,创建一个新的。还记录密钥的旧值和新值。
如果此时数据库崩溃,请查看日志记录,并通过将作为事务一部分的键重新设置为旧值来回滚事务。删除日志以完成回滚。
如果事务已提交,请删除旧密钥并删除日志条目以完成提交。
然后,您有一个使用多个版本的单线程键/值存储的事务。
如果数据库是多线程的,您必须使用MVCC(请参阅Yahoo的Omid,PostgreSQL,Wiredtiger,bsddb ...)以及诸如Precisely Serializable Snapshot Isolation(PSSI)之类的东西。
相关问题
- 1. 数据库系统体系结构讨论
- 2. 讨论MySQL数据库结构
- 3. 评论系统的分层数据
- 4. 什么是构建数据库的最佳构建系统?
- 5. C - 数组/结构讨论
- 6. MySql数据库设计评论系统
- 7. 评论系统数据库设计
- 8. 什么是Baasbox数据库系统?
- 9. 什么是数据库文件系统?
- 10. MVC架构:讨论
- 11. 什么是租赁系统的最佳数据库结构?
- 12. 文档管理系统的数据库结构是什么?
- 13. 谈论数据库时TBS是什么?
- 14. 使用Redis数据库系统的评论系统
- 15. 使用DDD时应该将系统集成到什么层?
- 16. 多服务层和数据库事务
- 17. SQL数据库系统中临时表的用例是什么?
- 18. 评论系统的结构
- 19. 处理N层体系结构事务
- 20. 评级系统数据库结构
- 21. 跟踪系统数据库结构
- 22. 联盟系统的数据库结构
- 23. 排名系统的数据库结构
- 24. 招聘系统的数据库结构
- 25. 反馈系统像Ebay,但事件:数据库架构
- 26. 什么是开源评论系统?
- 27. 正确抽象3层系统中的数据库层?
- 28. 统计数据库系统
- 29. 与Facebook集成讨论
- 30. 什么类型应该用于讨论论坛/ QNA论坛