处理海量数据时,在数据存储中定义实体的正确方法是什么?

What is the correct way to define entities in the datastore when dealing with mass data?

我正在为 android 制作一个即时通讯应用程序,并使用 Java 和应用程序引擎作为后端。

为了在后端存储对话和消息,我有 2 个选项(如我所见)来存储数据。

创建 2 个根实体: 对话(ID,消息 ID)和消息(ID,"text")。

对话(ID)消息(对话实体的子实体)(ID,"text")

虽然从技术上讲两者都可以工作,但我不了解数据存储的限制(ex 1 write/sec 对于某些实体),我担心 CPU 查询时的开销,以及有可能有数百万个消息根条目。我想我不确定是否需要祖先实体,或者最适合这样的应用程序。

tl;dr 构建此类数据库的最佳方式是什么?

不要使用祖先查询,除非您确定它们符合您的需要。对我来说,这是关于数据存储最令人困惑的部分,因为起初,parent/child 似乎是一种像树一样构建数据的好方法。
简而言之,当您在写入数据时必须具有中间一致性时使用它们。它对总大小和每秒写入有七项限制。

不用担心拥有数百万 "root" 个实体。这正是数据存储(和一般的 nosql)的优点。
所有数据存储查询都是高效的,它甚至不会让你 运行 一个它不是的查询(所以你必须事先添加所有需要的索引)因此不要担心查询性能,除非你不能用索引表达查询。
在你的情况下,假设对话不应该很大并且用户通常每秒输入的条目不超过 5 个,你可以使用祖先并且你将在每个对话中获得即时的一致性。
在这一点上,我认为要求架构太宽泛了,但这应该为您指出正确的方法。