这是我最近提出的一个非常好的问题。假设我们有一个假设(在这里插入您最喜欢的数据存储工具)数据库,该数据库包含居住在这个星球上的所有人的姓名,年龄和地址。您的任务是在HTML表格中打印出年龄大于18的所有人的姓名。你会怎么做呢?让我们假设人口正在以每秒1200 /的速度增长,数据库会相应更新(不要问如何)。在HTML表格上打印所有这些人的姓名及其地址的策略是什么?
答案 0 :(得分:3)
将年龄存储在数据库表中对我来说听起来像是一个麻烦 - 这是不可能维护的。您最好存储出生日期,然后在该列/属性上构建索引。
您必须获取表的初始转储才能显示。只计算18年前的日期(让我们说D0
)并对任何早于此出生的人使用查询。
使用数据库触发器接收有关死亡的通知,以便您可以立即将其从表中删除。
由于人们只会变老(不幸的是?),你可以使用远程查询来获得新增加的内容(即自你上次查询表格以来已经成为18岁的人)。例如。如果您想在第二天更新显示,则只为仅在D0 + 1
天出生的人发出查询 - 无需再次请求整个表格。
您甚至可以预取第二天达到18岁的人,将这些条目保存在内存中,并在它们达到该年龄的确切时刻将其添加到显示屏中。
哦,小心时区和DST问题 - 时间这些天是如此相对的事情......
答案 1 :(得分:1)
我看不出问题所在。您根本不必担心添加新记录,因为除非查询需要18年或更长时间才能运行,否则它们都不会包含在您的查询中。如果你有一个年龄索引,并且可能是任何数据库技术足以处理那么多数据而1200插入第二个更新索引,那么它应该可以工作。
在现实世界中,使用现有技术或类似的东西,我会每天创建一次每日快照,并对那些不包含当天记录的只读快照进行查询。该表对于此查询以及大多数其他查询肯定是足够好的。
答案 2 :(得分:0)
您是否强制将所有条目聚合到一个表中?
如果要为每个年龄组创建一个表(只需要大约120个表)并且只是将输入插入到这些表中会更简单,因为在插入条目时查看120个表的计算更简单在寻找参赛作品时要超过6,000,000,000。