通知管理应用程序的NoSQL数据库设计问题?

时间:2011-05-09 11:20:06

标签: php database-design nosql

我正在尝试在NoSQL中创建一个用于学习目的的数据库

它是一个简单的通知管理(在通知borad中添加/编辑/删除通知)应用程序。
我有Memcached(实际上是Membase),我可以将数据存储为键值对。

为了添加通知,我正在生成一个唯一的ID {using uniqueid()function}并在其中存储通知详细信息。但问题是, 的 1。如何列出所有通知?

我还想在通知中添加序列号。为此,我需要知道最后插入数据的序列号。的 2。如何找到最后插入的通知?

如果发现这个问题不合适,那么这是一个有点关系的数据模型(或者你可能会说,它应该在关系数据库中实现),请让我知道任何用例场景,我可以使用NoSQL来了解它。< / p>

2 个答案:

答案 0 :(得分:2)

实体之间的自然连接是关系型的 - 因此每个数据模型都是使用关系模式精心设计的。几乎每个nosql架构都可以在关系数据模型中表示。

使用NoSQL时,使用标准关系模型并不舒服(例如,当外部组件需要添加自己的数据并且您事先不知道它们)或者您需要更好的性能和扩展时 - 然后您将数据非规范化NoSQL架构。

MongoDB(http://www.mongodb.org/)是NoSQL数据的一个很好的起点,因为它允许您将非规范化模式与(几乎)关系设计混合使用。

不错的用例是为自定义表单数据存储实现数据模型 - 其中字段数和字段类型未提前知道

关于你的问题:

  1. 我不太了解membase,但如果它是一个简单的键值存储,唯一的解决方案是创建另一个存储所有id列表的键 - 但并发更新是一个很大的问题
  2. 您还可以在其他位置(在其他键处)存储最后一个插入ID - 此处并发更新更容易掌握

答案 1 :(得分:1)

要了解NoSQL的第一件事是,有很多NoSQL解决方案,具有不同的功能。你需要选择一个最合适的。在这种情况下,Redis将通过您选择的设计让您的生活更轻松。

问题的核心是CAP theorem。许多NoSQL解决方案故意选择保证一致性。一旦你抛弃它,你不能保证相同的ID不会分发两次。因此,使用时间戳或使用其他东西(如Redis)来生成可以存储在任何地方的唯一ID是有意义的。