我有兴趣听听你用过非关系型"nosql"数据库的设计策略- 也就是说,不使用传统关系设计或SQL的(通常是新的)数据存储类(如Hypertable,CouchDB, SimpleDB,Google App Engine数据存储,Voldemort,Cassandra,SQL数据服务等).它们通常也被称为"键/值存储",而在基础上它们就像巨大的分布式持久哈希表.
具体来说,我想了解概念数据设计与这些新数据库的差异.什么更容易,更难,什么不能完成?
您是否想出了在非关系世界中工作得更好的替代设计?
你有没有碰到任何看似不可能的东西?
您是否与任何设计模式弥合了差距,例如从一个设计模式转换为另一个设计模式?
你现在甚至都在做明确的数据模型(例如在UML中),还是让你完全放弃它们以支持半结构化/面向文档的数据blob?
您是否错过了RDBMS提供的任何主要额外服务,例如关系完整性,任意复杂的事务支持,触发器等?
我来自SQL关系数据库背景,所以标准化在我的血液中.也就是说,我获得了非关系数据库的优点,简化和扩展,我的直觉告诉我必须有更丰富的设计功能重叠.你做了什么?
仅供参考,这里有类似主题的StackOverflow讨论:
我需要做事务(开始,提交或回滚),锁(选择更新).我怎样才能在文档模型db中执行此操作?
编辑:
案例是这样的:
我可以用CouchDB解决这个问题吗?
重复
我对Google的Bigtable了解不多,但我想知道Google的Bigtable和MySQL之类的关系数据库之间的区别是什么.两者有什么限制?
最近我和MongoDB一直在合作,我不得不说我非常喜欢它.然而,它是一个完全不同类型的数据库然后我被使用.我注意到它对于某些类型的数据肯定更好,但是对于高度规范化的数据库,它可能不是最佳选择.
然而,在我看来,它可以完全取代你可能拥有的任何关系数据库,并且在大多数情况下表现更好,这令人难以置信.这让我想问几个问题:
我正在尝试将hibernate/mysql项目迁移到mongodb.hibernate是否支持迁移到mongodb?如果是这样,ORM映射如何转换为一对一或一对多关系?
我目前正在编写一个应用程序,在不同的层上有很多不同的数据持久性需求,我一直想知道......什么时候适当,什么时候不适合使用couchDB来满足我的持久性需求?
我正在学习 DDD(域驱动设计)和存储库模式(在 C# 中)。我希望能够使用存储库模式来持久化一个实体,而不关心实际使用的是哪个数据库(Oracle、MySQL、MongoDB、RavenDB 等)。但是,我不确定如何处理数据库特定的 id:s 大多数(全部?)数据库使用。例如,RavenDB 要求它应该存储的每个实体都有一个字符串类型的 id 属性。其他可能需要 int 类型的 id 属性。由于这由不同的数据库以不同的方式处理,因此我无法将数据库 ID 设为实体类的一部分。但它必须在某个时候存在,至少在我存储实际实体时是这样。我的问题是关于此的最佳实践是什么?
我目前追求的想法是,对于我想要支持的每个数据库,为每个业务对象类型实现特定于数据库的“值对象”。这些值对象将具有数据库特定的 id 属性,我将在读取和写入时在两者之间进行映射。这看起来是个好主意吗?
database ×6
couchdb ×3
mongodb ×2
nosql ×2
bigtable ×1
c# ×1
hibernate ×1
java ×1
relational ×1
repository ×1