【问题标题】:Choosing NOsql or RDMS, and which DataStructure?选择 NOsql 或 RDBMS,选择哪种数据结构?
【发布时间】:2014-02-27 09:37:18
【问题描述】:

我要开始一个大型 3D 建模项目,我需要选择一个系统来存储我的数据。在我的引擎处理之前,原始格式的 3d 模型由数十亿个彩色三角形组成。 输入: - 每个 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 也可以很好,因为我的数据非常格式化并且由整数组成,索引可以在这里发挥作用。

【问题讨论】:

    标签: sql opengl data-structures nosql rdbms


    【解决方案1】:

    不是专家,我无法真正回答您的问题。但是 cmets 太短了,无法在那里给你适当的建议。所以这是我在“答案部分”中的“cmets”:-)

    我理解该模型,它由三角形的列表(或准确地说是一组)组成。您将始终需要阅读完整的数据来加载您的模型。您不仅加载 x 1000 或其他任何位置的三角形。

    所以你对这个问题的想法是好的。连接你的三角形的是它们共享的点。所以是的,您可以使用 RDBMS 并将点存储在一个表中,并将它们关联的三角形存储在另一个表中。然而,RDBMS 中的“指针”(在指向您的点记录的三角形表中)通常非常大(所谓的行 ID),因此您并没有真正节省空间,但需要重新构建所有三角形从它们的相关点,这需要时间。我的建议:不要使用 RDBMS。

    如果上述假设是正确的,并且您的模型仅由一组随机排列的三角形组成,您可以轻松地将它们存储在文件中。在一些自定义的二进制格式中,所以文件会比较小。您甚至可以压缩它以使用更少的硬盘扇区。没有用在任何地方存储一些关系,每个模型只有一个文件。你从头读到尾。它不能更快​​。

    我不知道有任何 NoSQL 数据库专门用于存储大型二进制文件。它的唯一任务是为您提供模型的原始数据。我的意思是,想办法存储几个模型文件并再次找到它们只会省去你的麻烦(如果合适的话,它可能会进行压缩)。但是,可以在注册表、配置文件、小文本文件等中存储模型名称和文件名。没什么大不了的,我想。所以我的第二个建议是也不要使用 NoSQL DBMS。但如前所述,我不是这方面的专家,可能有专门针对这个(小)任务的 dbms。

    【讨论】:

    • 我的 3D 模型将用于房屋、酒店等大环境......所以我经常只加载我的模型的一些三角形(前公寓房间),这就是为什么我需要过滤可以使用 DMS 更快完成的数据。有时我的服务器会接收数据来更新 3d 模型,然后我必须进行一些搜索以找到我必须拆分或合并的三角形,每次在内存中加载 500mb 文件并搜索会很痛苦.
    • 啊,好吧,所以关系比较多。一所房子,它的公寓,公寓的房间......然后是的,当然你可以使用数据库管理系统来存储这些关系。听起来是个好主意:-) 但是,三角形集仍然可以以二进制格式存储(在表格列或文件中)。至少在我看来,让数据库知道三角形的坐标是什么,您将一无所获。 RDBMS 可以胜任这项任务。至于 NoSQL,我不知道,没有经验。至于更新:加载房间的二进制数据,更改它并再次存储新的二进制数据。
    • 对不起,我没有详细解释结构。我的 3d 模型很大,例如一整栋房子,但我不知道构成房间或客厅的部件,它是所有东西的一个大模型。我谈到了房间,因为最终用户将使用网络界面浏览模型,所以我的服务器不会只将十亿个三角形发送到 WebGl,它只会发送应该可见的部分,所以数据库需要知道坐标,这样我就可以,只用一个线性的条件位置,选择可见的三角形通过网络发送。
    • 我会选择 RDBMS,因为我已经习惯了。但我不希望它成为主要原因,我不想仅仅因为我不知道NOSql的能力而选择它。
    猜你喜欢
    • 2012-05-15
    • 2013-11-12
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多