我有一个用户表和一个文档表。文档只有一个用户作为所有者,对于我正在构建的应用程序,我知道我通常会访问与单个给定用户关联的一组文档。
假设普通用户有 K 个文档,并且某些常见查询获取给定用户的所有文档。我不希望我的数据库(PostgreSQL)必须进行 K 磁盘搜索(平均而言)来获取用户的所有文档。理想情况下,文档将存储在连续的块中,以便获取只需要几次搜索。
组织文档表模式以创建这样的位置是否可能(并且合理)?我知道无 SQL 实现总是这样做吗?例如,BigTable 论文讨论了如何通过 URL 分配 web 表的行键,除了 url 是颠倒的,例如 com.cnn.www,以便 CNN 的所有页面在数据存储中彼此靠近。在 Postgres 中似乎不可能有类似的东西,因为这些表不能按索引组织,尽管在带有 InnoDB 的 MySQL 中可能是可能的。 这篇文章得出了类似的结论。