2016-07-24 3 views
2

Я рассматриваю возможность хранения рабочего каталога (то есть рекурсивной/вложенной папки/файлов) в базу данных mysql.Создание структуры папки/файла

Идея состоит в том, чтобы иметь таблицу «проектов» и таблицу, содержащую все папки/файлы с соответствующими путями в дереве (varchar).
Запрос проекта должен возвращать папки и файлы в виде списка путей String (+ некоторые метаданные), которые я буду использовать для построения дерева на клиенте.

Следует отметить, что записи «файла» в моем рабочем каталоге представляют собой метаданные, которые представляют файлы json в хранилище данных mongodb (они описывают веб-страницы как сложные вложенные json). Записи файлов будут запрашиваться чаще, чем папки (они вообще не запрашиваются) и будут связаны с другими таблицами. Для моего приложения файлы имеют другое значение, чем папки, которые важны для моего рабочего каталога.

Мой вопрос: что будет лучший вариант:

  • Хранить файлы и папки в отдельных таблицах
  • Хранить файлы и папки в той же таблице (записи будут практически идентичные), и использовать FK на объединенной таблице с 2 записями «файл»/«папка»
+0

Короткий ответ:„классические“реляционных баз данных (в том числе MySQL) не очень хорошо в этом. Вот хорошая ссылка: [Управление иерархическими данными в mySQL] (http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/). Два подхода a) сохраняют * полный * путь в качестве столбца. Преимущество этой «псевдо-папки» заключается в том, что она проста и быстра. b) Используйте 3 таблицы: 1) папки, 2) данные, 3) «ссылки», которые связывают данные с папками (в потенциальном отношении n: m). – paulsm4

+0

@ paulsm4 Спасибо за подсказку. Я попробовал начальную реализацию с mongodb, чтобы сохранить рекурсивное вложенное дерево как json, но обнаружил немало проблем с отсутствием транзакций. Какую систему хранения вы бы предложили? – Trace

ответ

2

Короткий ответ: «классические» реляционные базы данных (включая mysql) не очень хороши в этом. Вот хорошая ссылка: Managing hierarchical data in mySQL

С другой стороны, Wordpress - это приложение, которое выполняет многие действия, которые вы пытаетесь сделать, и делает все это в mySql (или эквивалентной RDBMS).

Посмотрите here, особенно посмотрите на раздел "taxonomies".

Другой подход может состоять в том, чтобы посмотреть на graph database, например neo4J.

«Надежда, что помогает ...

+0

Спасибо за совет. Мои деревья также будут представлять структуры сайта; Я думаю, что для начала достаточно простой древовидной структуры. – Trace