打印所有超过18岁的人的姓名?

时间:2011-04-11 16:50:00

标签: database algorithm language-agnostic bigdata

这是我最近提出的一个非常好的问题。假设我们有一个假设(在这里插入您最喜欢的数据存储工具)数据库,该数据库包含居住在这个星球上的所有人的姓名,年龄和地址。您的任务是在HTML表格中打印出年龄大于18的所有人的姓名。你会怎么做呢?让我们假设人口正在以每秒1200 /的速度增长,数据库会相应更新(不要问如何)。在HTML表格上打印所有这些人的姓名及其地址的策略是什么?

3 个答案:

答案 0 :(得分:3)

  1. 年龄存储在数据库表中对我来说听起来像是一个麻烦 - 这是不可能维护的。您最好存储出生日期,然后在该列/属性上构建索引。

  2. 您必须获取表的初始转储才能显示。只计算18年前的日期(让我们说D0)并对任何早于此出生的人使用查询。

  3. 使用数据库触发器接收有关死亡的通知,以便您可以立即将其从表中删除。

  4. 由于人们只会变老(不幸的是?),你可以使用远程查询来获得新增加的内容(即自你上次查询表格以来已经成为18岁的人)。例如。如果您想在第二天更新显示,则只为仅在D0 + 1天出生的人发出查询 - 无需再次请求整个表格。

  5. 您甚至可以预取第二天达到18岁的人,将这些条目保存在内存中,并在它们达到该年龄的确切时刻将其添加到显示屏中。

  6. 顺便说一下,即使每个人有2KB的数据,你也可以获得一个18TB的数据库(假设50%的开销)。任何稍微强化的服务器都应该能够处理这种数据库大小。另一方面,12 TB HTML 表的想法吓坏了我......

    哦,小心时区和DST问题 - 时间这些天是如此相对的事情......

答案 1 :(得分:1)

我看不出问题所在。您根本不必担心添加新记录,因为除非查询需要18年或更长时间才能运行,否则它们都不会包含在您的查询中。如果你有一个年龄索引,并且可能是任何数据库技术足以处理那么多数据而1200插入第二个更新索引,那么它应该可以工作。

在现实世界中,使用现有技术或类似的东西,我会每天创建一次每日快照,并对那些不包含当天记录的只读快照进行查询。该表对于此查询以及大多数其他查询肯定是足够好的。

答案 2 :(得分:0)

您是否强制将所有条目聚合到一个表中?

如果要为每个年龄组创建一个表(只需要大约120个表)并且只是将输入插入到这些表中会更简单,因为在插入条目时查看120个表的计算更简单在寻找参赛作品时要超过6,000,000,000。