0

我将使用的技术是:GAE Datastore 和 Objectify。我的数据库与事件和地点有关(也许一些已经设计了类似于谷歌日历或 facebook 事件等数据库的专家可以帮助我)。

IMO,我需要以我应该真正快速加载和查找事件的方式设计我的数据库。所以我不知道我要解释的是否是其他人使用的模式......如果你能告诉我这是否是一个好主意......

诀窍是,我假设数据存储中的键将按字母顺序排列(我想我已经读过可以这样做......)。

我想为每个创建的新事件创建一个键(字符串),它将由以下组成:

[year_month_day] [hour_minute] [country_city_zone_local] [eventName]

存储在数据存储中的密钥示例:

[201304012200_fr_paris_quartierLatin_latinNightclub_superFiesta1] [201304022200_fr_paris_quartierLatin_latinNightclub_superFiesta2] [201304032200_fr_paris_quartierLatin_latin_latin_latin_latinNightclub_superFiesta3] [2013040422240Nquarlatin_superFiesta3]

在上面的示例中,在同一本地 (latinNightClub) 连续 4 天发生 4 个事件。

现在,假设我在 50 个国家/地区有数百万个事件,我应该快速加载 DAY_1 (2013/04/02) 和 DAY_2 (2013/04/04) 之间发生的事件。根据我的想法,我应该从 20130402 .....、20130403 ... 和 20130404 ......可能更快。

问题 1:这样设计我的数据库是个好主意吗?是否有可能使用提到的技术来做到这一点?

问题 2:在关键中,我还包括了与国家和事件发生地相关的信息......因为,如果用户只想要“latinNightClub”中发生的事件,那么我也可以快速获取结果(由于键是按字母顺序排列的......)所以这也是一个好主意吗?

就我而言,第一步很难做到,您的帮助可能真的很棒!如果我完全错了,请随时给我任何应该有帮助的链接。

问候,

4

1 回答 1

2

这是一个可怕的想法。

您将不可避免地需要更改事件的属性,而在现实世界的模式中更改键值几乎是不可能的。谷歌“自然密钥与合成密钥”——这场争论在传统的 RDBMS 中已经重复了数百万次,同样的教训也适用于这里。

只需在您尝试搜索的字段上创建一个多属性索引。问题解决了。

于 2013-04-03T15:55:59.627 回答