2011-03-01 137 views
2

我正在寻找方法来实现免费模式的数据存储设计。但是,通常在NoSQL学校中使用无模式这个术语。我对NoSQL的可伸缩性优势不感兴趣。一个例子是朋友式的方式(如Bret Taylor的博客中所解释的)。你能否指点我一些其他资源或设计实例/案例研究,其主要目标是要有一个灵活/无模式设计(我甚至可以牺牲性能)?模式免费数据存储设计

+0

你能提供一个链接到博客文章? – 2011-03-01 20:55:44

+0

它在这里。 http://bret.appspot.com/entry/how-friendfeed-uses-mysql – mete 2011-03-02 07:01:25

回答

2

我不是100%地肯定你的使用情况,您能分享一下你正在尝试做一些更多的信息? 当你说你没兴趣“的NoSQL”这是否意味着你必须实现一个关系型数据库之上的一切吗? (哪一个?)

有一对夫妇的做法,把关系模式更加灵活:

  • EAV /实体 - 属性 - 值设计,其中所有“实体”一个表中存储公用信息/系统中的对象,一个表包含这些实体可以具有的属性的信息以及一个存储(entity_id,attribute_id,value)的表。例如,请参见http://en.wikipedia.org/wiki/Entity-attribute-value_model

  • “皮包骨格的表”,其中你有宽列表,每列类型有一列(一个varchar列,一个blob列,一个int列等),然后只填写匹配所需值类型的列储藏。当你只想存储不同类型的值而不是随时更改属性时,这是有意义的。可用于将属性存储在EAV模式中。

  • 储存“三合一”的数据:语义网的人已经花了相当多的时间研究如何最好的商店RDF数据,包括主题关系客体的三元组。有“真正的”RDF商店有自己的查询语言,但其中一些可以使用关系数据库作为存储后端。如果这听起来像是要走的路,请看这里:http://www.w3.org/2003/01/21-RDF-RDB-access/ - 一个简单的谷歌查询“在关系数据库中存储rdf”应该指向几个Triplestore的实现,可以有效地映射到关系数据库中。

希望这有助于!

+0

感谢您的回答。我知道我说的有点模糊,从概念上讲,我想存储的只是数据,我没有性能限制。那么我有什么选择让数据保持一种比传统方法更灵活的方式来修改,这是我的问题。我正在检查你提到的方法。 – mete 2011-03-04 11:41:08

1

你可能想看看Berkeley DB。它提供了一个无模式简单的键值API(ala NoSQL),并且是一个直接链接到您的应用程序的库。 Berkeley DB的好处在于你可以拥有你的蛋糕并且也可以吃它。它提供了开发人员正在寻找的简单,灵活,可嵌入的数据存储,但它非常快速,可扩展且可靠。除了基本密钥/值对API之外,Berkeley DB还提供了两个其他对开发友好的API:Java Collections APIDirect Persistence Layer API(类似于POJO的持久性API)。

大多数BDB应用程序开发人员使用最适合于应用程序代表数据的API。 C和C++结构通常存储为简单且不透明的键/值对,其中Java集合显然与该API匹配良好,并且Java类与DPL API匹配良好。

祝您的搜索。

+0

是否可以使用bdb创建高可用性存储? – mete 2011-03-11 16:11:59

+0

是的,Berkeley DB通过复制已经有很多年了。 Berkeley DB实现了一种主从架构,在这种架构中,必须将写入数据发送给主机,并将读取数据发送到主机或副本。事务提交是将更改复制到副本的触发器。您可以根据需要获取尽可能多的副本,并分布在局域网或广域网中。许多客户使用BDB HA为其关键任务应用程序提供灾难恢复,自动故障转移和分布式负载平衡。你可以在这里阅读更多关于它的内容:http://bit.ly/gEqhI0。 – dsegleau 2011-03-11 20:42:53