这可能是一个愚蠢的基本问题,但正如标题中所描述的,我想知道PostgreSQL如何在拥有数百万条目时处理性能(可能达到十亿条目)。
更具体地说,我想在我的数据库中存储数据(音频,照片和视频)(我只存储他们的路径,文件在文件系统中组织),但我必须决定使用单个表“data”存储所有不同类型的数据,或多个表(“data_audio”,“data_photos”,“data_videos”)来分隔这些类型。
我问这个问题的原因是我有95%的照片和5%的音频和视频,如果我想查询我的数据库中的音频条目,我不希望它是所有照片条目都放慢了速度(在一千个中寻找一条线必须与一百万之间的搜索不同)。所以我想知道PostgreSQL如何处理这个以及是否存在某种方法来进行最佳优化。
我已经阅读了这个非常有趣并且似乎相关的主题: How does database indexing work?
这是我应该做的吗?
回顾我将在核心表中提供的核心存储信息:
第一个选项:
DATA TABLE(包含音频,照片和视频):
USERS TABLE:
数据用户关系表:
活动表:
数据活动关系表:
(在USERS.id过滤数据后,SEARCH查询主要在DATA._timestamp和ACTIVITIES.name字段上完成)
第二个选项(仅使用以下三个表切换前一个DATA TABLE并保留所有其他表):
其他问题: 每个用户拥有一个数据库是个好主意吗? (在故事情节中,能够在数据库中查询数据取决于您是否拥有权限,如果要从两个不同的用户检索数据,则必须询问两个用户的权限以及权限过程这是一个独立的过程,它不在这里处理,所以让我们说当你查询数据库时,它总是对同一个用户进行查询)
我希望我已经清楚了,先谢谢你的任何帮助或建议!
西里尔
答案 0 :(得分:0)
数目:
PostgreSQL很酷,数百亿行。
如果不同类型的数据都具有相同的属性且与数据库透视图相同(与其他表具有相同的关系等),则将它们保存在一个表中。如果没有,请使用不同的表格。
对表的索引访问速度不依赖于表的大小。
如果不同用户的数据具有连接,例如它们使用公共基表,或者您希望能够为不同用户连接表,则最好将它们保存在一个数据库中的不同模式中。如果无论如何将它们分开是很重要的,请将它们保存在不同的数据库中。
如果您使用行级安全性或让您的应用程序处理它,也可以选择将不同用户的数据保存在一个表中。
此决定在很大程度上取决于您的使用案例和架构。
警告:不要创建包含数千个数据库和数千个模式的数据库的集群。这会导致目录中出现性能问题。