我在扩展应用程序时遇到了一些困难,因此决定在这里提出一个问题。
考虑一个关系数据库(比如 mysql)。假设它允许用户发布帖子,并且这些帖子存储在post
表中(具有字段:)postid, posterid, data, timestamp
。因此,当您按新近度排序检索所有帖子时,您只需使用posterid = you
和获取所有帖子order by date
。很简单。
此过程将使用时间戳作为索引,因为它具有最高的基数并且正确。因此,除了查看索引之外,还需要从磁盘中提取 1 行来完成此任务。惊人的!
但是,假设自您上次发布以来,其他用户(在系统中)又发布了 100 万条帖子。然后,为了获取您的最新帖子,数据库将再次将索引与时间戳挂钩,并且我们不知道从那时起发生了多少帖子(或者我们至少应该手动估计并设置首选键)?然后我们浪费了查看一百万零一行只是为了获取一行。
此外,来自多个任意用户的一组帖子将是用例之一,因此我无法创建像 userid_timestamp 这样的字段来创建子索引。
我看错了吗?或者必须从根本上改变应用程序以允许这样的操作至少在某种程度上有效地发生?