java – 应用引擎数据存储:如何实现没有连接的帖子和标签?

前端之家收集整理的这篇文章主要介绍了java – 应用引擎数据存储:如何实现没有连接的帖子和标签?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在Google App Engine( Java)中构建一个应用程序,用户可以在其中发帖,我正在考虑在这些帖子中添加标签,所以我将会有这样的:

实体发布:

public List<Key> tags;

实体标签

public List<Key> posts;

很容易查询,例如,所有具有某个标签的帖子,但是如何获取所有具有标签列表的帖子?
我可以查询每个标签,然后做一个交叉的结果,但也许有一个更好的方式,因为这将是很慢的很多帖子.

另一件事可能会更困难的是收到一个帖子,获得标签共同按照常见标签数量排列的帖子,所以我可以以某种方式获得“类似”的帖子.

那么,加入这将是一个很容易,但我开始与应用程序引擎,不能真正考虑一个很好的方式来替换联接.

谢谢!

解决方法

有了这个设计,我恐怕你的标签实体可能是一个瓶颈,特别是如果你期望一些标签是非常普遍的.
我可以想到的三个具体问题是您的获取和投放的效率,写入争用和爆炸性索引.我们来看看stackoverflow的一个例子 – 现在有14,000个帖子标记为“java”.

这意味着每次您需要获取您的java标签实体时,您将从数据存储区中提取14k的关键数据.那么当你做一个put时,你会发回它.这可能会增加很多字节.
>除了字节来回,每个put将需要更新索引. ListProperty中的每个条目映射到单独的索引条目.所以现在你正在做很多索引更新.这导致我们到3号…
>爆炸指数.每个实体对它可以拥有的索引条目有多少限制.我认为每个实体的限额是5000.所以这实际上是有多少个帖子可以拥有相同标签的硬限制.

进一步阅读:

>这个post涉及大型列表的一些问题
> Exploding indexes

好消息是,您的一些要求将被Post实体轻松处理.
例如,您可以使用以下查询过滤器轻松找到所有包含标签列表的帖子:

Query q = pm.newQuery(Post.class)
q.setFilter("tags" == 'Java' && "tags == 'appengine'");

对于所有具有java或appengine标签的帖子,您需要对每个标签执行一个查询,然后自己组合结果.数据存储区现在不处理OR / IN类型操作.

发现相关帖子听起来很棘手.一些咖啡后,我会考虑一下.

猜你在找的Java相关文章