我要开始一个大型的3D模型化项目,我需要选择一个系统来存储我的数据。在我的引擎处理之前,原始格式的三维模型由数十亿个彩色三角形组成。 输入: - 每个三维模型将包含大量三角形(3个空间点(bigint x,y,z)和一个颜色(rgb))。 - 如果INSERT很慢,那不是什么大问题,但SELECT必须尽可能快(SELECT与一些线性WHERE条件)。 - 如果我在一个没有问题的模型中丢失了一个或两个三角形,那么数据一致性并不重要。 - 我可以为每个对象创建一个表,所以我可以将它设为只读,我可以在其上放置一些列索引(RDMS)。
有我的问题: 数据结构 : 许多三角形将共享相同的点。我应该将三角形保存在一个表中,如id x1,y1,z1 x2,y2,z2 x3,y3,z3,r,g,b;或者一个用于点id,x,y,z的表和一个用于三角形id,dot1Id,dot2Id,dot3Id,r,g,b的表(我认为十亿行的连接会很慢,而且我们甚至不能使用NOsql如果我的记忆力很好,请加入...)????
RDMS还是NOsql? 我认为NOsql对于我需要的东西是好的,它做快速的条件选择非常大的数据吗? RDMS也可以很好,因为我的数据非常格式化并且由整数组成,索引可以在这里发挥作用。
答案 0 :(得分:0)
不是专家,我无法回答你的问题。但是评论是短的,以便在那里给你适当的建议。所以这是我在“答案部分”中的“评论”: - )
我理解模型,它由三角形的列表(或精确的集合)组成。您将始终必须阅读完整数据以加载模型。你不仅要加载x< 100和y> 1000或其他什么。
所以你对问题的看法是好的。什么链接你的三角形是他们分享的点。所以是的,您可以使用RDBMS并将点存储在一个表中,将相关的三角形存储在另一个表中。然而,RDBMS中的“指针”(在你的三角表中指向你的点记录)通常都非常大(所谓的行ID),所以你并没有真正节省空间,而是需要重新构建你所有的来自相关点的三角形,需要时间。我的建议:没有RDBMS。
如果上述假设是正确的,并且您的模型仅包含随机顺序的三角形集,则可以轻松地将它们存储在文件中。在某些自定义二进制格式中,文件会相当小。您甚至可以将其压缩以使用较少的硬盘扇区。无需在任何地方存储某些关系,每个模型只需一个文件。你从头到尾阅读。它不能更快。
我不知道任何NoSQL数据库专门用于存储大型二进制文件。它唯一的任务是为您提供模型的原始数据。我的意思是它只会让你省去考虑存储多个模型文件并再次找到它们的方法(如果合适的话可能会进行压缩)。但是,使用文件名存储模型名称可以在注册表,配置文件,小文本文件等中完成。我想,没什么大不了的。所以我的第二个建议是不要使用NoSQL DBMS。但正如所提到的,我对此没有任何证据,并且可能有dbms专门针对这个(小)任务。