我想创建一个百万双列表..好吧我试图用java创建,将大约100 mbs的数据转换为7Gbs并花了20个小时来完成它...我使用postgre sql之前我尝试过mysql, mysql更糟糕..有没有办法用更少的空间和时间创建这么多的表? 水平分区会很好吗?
我正在尝试索引RDF数据以便快速执行,Idea是使用rdbms索引rdf数据并将sparql查询转换为sql查询,以及RDF是三元组主题,谓词,对象,现有方法使用谓词形式的资源集合表意味着,对于每个谓词,主题和对象都存储,与其他谓词相比,谓词量非常少。因此,查询需要连接这些谓词表,以便在平面文件中获得大约100mbs的结果。我是尝试创建主题表4快速执行
答案 0 :(得分:5)
如果你的数据库中需要一百万个表,那你就错了。
表旨在表示结构上和概念上不同的数据。而且我拒绝相信您在应用程序中使用了一百万种不同的概念。
有时,初学者认为他们应该为每个用户创建一个表格,例如。但“用户”是一个概念,并且您为每个用户存储相同的信息(例如,名称,电子邮件,用户名,密码),因此它应该是一个表,其中每个用户是只是一个单独的行。
听起来你犯了类似的错误,也许不是用户,而是有一些其他的抽象,你有很多实例。每个实例应该是一个表中的一行。
如果您向我们描述您试图存储在数据库中的内容,我们几乎可以肯定地帮助您弄清楚应该如何映射到表格。
修改强>
在阅读你的评论后(这应该真正编辑成问题本身),这是我的想法:
如果所有数据的结构方式相同(如三元组),则只需将所有数据存储在一个包含三列的表中,然后添加必要的索引以进行高效查找。
如果事先知道所有谓词,那么可以为每个谓词创建一个表,但我不确定会有多少意义,甚至。
最干净的选择可能是有4张桌子:
(id, subject)
,(id, predicate)
,(id, object)
,(subjectid, predicateid, objectid)
。
答案 1 :(得分:1)
数据库表占用了相当多的空间来管理索引,架构和保留磁盘空间。
在大多数情况下,使用一个拥有2000万行的表比使用一百万个包含20行的表更好。
如果2000万行的方法太大,那么你可以使用垂直分区来使其表现更好。
我认为你主要是成功地为Stack溢出用户提供大规模的年度宣传,试图解决你为什么需要做你所要求的事情:)