2010-08-13 51 views
1

我的阅读是有限作为然而,但到目前为止,这里是我已经确定了使用GAE Datastore的一些关键点:映射数据对谷歌App Engine的博客应用:

  • 它不是一个关系型数据库。
  • 数据重复默认跨存储空间发生。
  • 您不能在数据存储级别“加入”表。
  • 针对写入频率较低的读取进行了优化。

这些使我的博客系统以下数据模型:

博客有一个相对组已知的“列”的:ID,日期,作者,内容,等级,标签。数据存储允许根据需要添加更多的列,但众所周知,即时添加额外列的可能性很少见,因为它需要更多的后端专用编码以及对整个博客系统的更多思考。

博客没有的是一系列评论和标签。在传统的关系数据库结构中,它们通过连接进行映射。由于这些是不可能在GAE,我曾经想过执行以下操作:

  • 文章 - > ID,作者,日期,标题,内容,评分,标签
  • 评论 - > ARTICLE_ID,作者,日期,内容,评分
  • 标签 - >标签,标识条

例子:

物品─ 1 - 管理员 - 01/01/2011 - 问题? - 答案... - 5 - 问题,答案,猜测,反刍 2 - 管理员 - 01/05/2011 - 谁知道? - 不是我! - 10 - 问题

评论 - 1 - 约翰·史密斯 - 01/02/2011 - 愚蠢,愚蠢,愚蠢。 - 0 1 - 李四 - 01/03/2011 - 智能,智能,智能.. - 5

Tags- 问题 - 1,2个 答案 - 1个 猜测 - 1个 沉思 - 1

现在,这是我的推理。在浏览博客时,您可以通过以下方式进行操作:日期,作者,标签/主题,评级,评论等。日期,作者和评级是静态的,因此可以与所讨论的文章一起轻松驻留在单个表中。

标签在标签'table'和文章'table'之间被复制,但是这里的一致性是在应用程序级别处理的,并且在将文章发送给查看器时,标签留在应用程序级别以消除连接。标签表格用于通过标签进行搜索。然后在应用程序级别分析文章列表,然后通过应用程序调用检索这些文章。

同样的事情会发生与评论。连接将通过传递检索的文章ID的额外方法调用在应用程序级别发生。

现在,我为什么要在应用程序级别处理连接?我曾想过在每篇文章中插入所有内容,并在创建时添加评论,但是一旦将博客归入成千上万篇文章,并考虑到返回大小的限制,就必须考虑排序和搜索的时间复杂性,而不是知道可能会有多大的文章/评论。我没有测试过,但考虑到时间复杂性,我开始得出结论,当试图通过标签搜索这些文章时,文章检索将会线性增长到文章数量。我是否正确,并且这种方法是否可以解决这个问题?此外,这种数据模型通常看起来像是在GAE中有效实现持久数据存储的一种方式?

谢谢, 试图环绕它我的头......

回答

2

你的方法听起来很合理。通过标签检索文章最容易实现的方法是在文章上添加一个ListProperty标签并对其进行过滤 - 这将花费与返回的结果数量成正比的时间,而不是数据存储区中的数量 - 并且您是对的应该保留一组单独的“标签”实体,以便您可以单独列出所有正在使用的标签。

您可能想要在App Engine上撰写博客系统时查看我的series of posts