从MySQL结果构建深树的最佳方法是什么?

时间:2015-08-03 18:30:10

标签: mysql node.js algorithm

我的树结构如下:

    • 章节
        • 组件
          • 图片

我的结果基于一些外部联接:

  • book_id
  • BOOK_NAME
  • chapter_id
  • chapter_name
  • SECTION_ID ... 直到图像。

从MySQL返回的线性数据集构建树结构的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

this question非常相似。

有三种基本选择和一种迂腐选择。

第一个选项

SELECT * FROM Book b JOIN Chapters c USING (book_id) JOIN Sections s USING (chapter_id) ... 

使用上述查询的结果,您可以通过读取列并遍历根对象轻松创建嵌套对象。这很简单,但数据库中重复数据的数量可能会导致性能问题,具体取决于您的使用情况。

第二个选项

SELECT * FROM Book WHERE (your filters here);

使用查询结果,创建BookId的地图 - >书籍对象,例如

for (result : results) { books[result.book_id] = new Book(result); }

用它,再做一个查询:

SELECT * FROM Chapter WHERE book_id IN (book ids you collected earlier)

继续这样做,随时进行映射。 可以比第一个选项更快,更高效,但复杂代码的数量可能会使性能提升不再值得。

第三个选项

使用ORM,例如Sequelize。它将使用我的第一个和第二个选项的一些有效组合。大概。但作为用户,它会将痛苦从你身上抽走。

迂腐选项

根据您的使用情况,MySQL可能不适合托管此类数据。您需要多久返回一个完整的Book对象,而不是现在用户需要的部分?您是否经常根据图像过滤书籍?也许像MongoDB这样的基于JSON的商店可能会有所帮助,或者您可以将章节,组件和图像存储在Chapters表的单个BLOB列中。同样,它在很大程度上取决于您的用例。