Database 在数据库中创建百万表?

Database 在数据库中创建百万表?,database,postgresql,optimization,Database,Postgresql,Optimization,我想创建一百万个双列表。。我试着用java来创建,大约100Mbs的数据转换成7Gbs,花了20个小时来完成。。。我用的是PostgreSQL,之前我试过mysql,mysql更差。。有没有办法用更少的空间和时间创建这么多的表? 水平分区能正常工作吗 我正在尝试为RDF数据建立索引,以便快速执行,其想法是使用rdbms为RDF数据建立索引,并将sparql查询转换为sql查询,RDF是以主语、谓语、宾语三元组形式的资源集合,现有方法使用谓词表表示,对于每个谓词,存储主语和宾语,与其他2个谓词相比

我想创建一百万个双列表。。我试着用java来创建,大约100Mbs的数据转换成7Gbs,花了20个小时来完成。。。我用的是PostgreSQL,之前我试过mysql,mysql更差。。有没有办法用更少的空间和时间创建这么多的表? 水平分区能正常工作吗


我正在尝试为RDF数据建立索引,以便快速执行,其想法是使用rdbms为RDF数据建立索引,并将sparql查询转换为sql查询,RDF是以主语、谓语、宾语三元组形式的资源集合,现有方法使用谓词表表示,对于每个谓词,存储主语和宾语,与其他2个谓词相比,谓词的数量非常少。因此,查询需要连接这些谓词表,以便在平面文件中获得100MB的结果。我试图创建主题表4快速执行数据库表在管理索引、架构和保留磁盘空间方面占用了大量空间

在大多数情况下,使用一个2000万行的表比使用100万个20行的表要好

如果2000万行方法变得太大,那么可以使用垂直分区使其性能更好


我确实认为,您将主要成功地为堆栈溢出用户提供一个大规模的年鉴,试图找出为什么需要执行您要求的操作:)

如果您的数据库中需要一百万个表,那么您就错了

表旨在表示结构和概念上不同的数据。我不相信你的应用程序中有一百万个不同的概念

例如,有时初学者认为他们应该为每个用户创建一个表。但是“用户”是一个概念,您为每个用户存储相同的信息(例如名称、电子邮件、用户名、密码),因此它应该是一个表,其中每个用户只是一个单独的行

听起来你也犯了类似的错误,也许不是在用户身上,而是在你有很多实例的其他抽象上。每个实例都应该是单个表中的一行

如果您向我们描述您试图存储在数据库中的内容,我们几乎可以肯定地帮助您了解它应该如何映射到表

编辑
在阅读了你的评论(这些评论应该被编辑成问题本身)之后,以下是我的想法:

如果所有数据的结构都相同(作为三元组),那么只需将所有数据存储在一个包含三列的表中,然后添加必要的索引以实现高效查找

如果所有谓词都是预先知道的,那么可以为每个谓词创建一个表,但我甚至不确定这有多大意义

最干净的选项可能是有4个表:

(id,subject)
(id,谓语)
(id,object)
(主语,谓语,宾语)

你到底为什么要这样做?也许你可以告诉我们你为什么要这样做,人们可以给你一个更好的解决方案的建议。听起来像一个。显然你不应该尝试创建一个“双列”表。感谢你的重播,我想的是非常天真的方式,我正在尝试索引RDF数据以快速执行,其思想是使用rdbms对rdf数据进行索引,并将sparql查询转换为sql查询,rdf是以主语、谓语、宾语三元组形式的资源集合,现有方法使用谓词表的方式,对于每个谓词,存储主语和宾语,谓词的数量比其他两个谓词少得多。因此,查询需要连接这些谓词表,以便在平面文件中获得100MB的结果。我正在尝试创建主题表4快速执行。正如我在前一篇文章中所述,现有方法使用谓词表。。问题是,如果一个谓词表上有10个连接,那么返回结果需要花费小时。Ex query(?p livesIn?l)所以p是person,l是location与(?p hasName kunal)连接,所以从第一次查询的结果中,我想检查哪个人的名字是kunal。。还有一些进一步的加入。。我的想法是在主语表或宾语表中搜索谓词,而不是在谓词表中搜索ssObject。@kunal:这听起来是个坏主意,原因有很多。这不是关系数据库的工作方式。但是请记住,字符串查找(我假设所有三个字段都是字符串)相当昂贵。看看我的上一个建议,这可能会大大加快速度(与查找主题为kunal的所有三元组不同,您可以在主题表中查找kunal一次,然后在三元组表中搜索主题id(对于每个三元组,只需在每个主语、谓语和宾语表中存储一个id)