2012-05-26 6 views
1

Я хочу реализовать небольшую файловую систему, такую ​​как коллекция в MongoDB.Поиск строки в коллекции MongoDB

Так сказать мой объект выглядит следующим образом

{ 
    "\":{ 
     'autoexec.bat':{ 
      name:'autoexec', 
      filetype:'bat', 
      size:1302 
    }, 

    'users':{ /* its own tree */ }, 
    'windows':{ 
     'system':{ 
      'autoexec.bat':{ 
       name:'autoexec', 
       filetype:'bat', 
       size:1302123 
      } 
     } 
    } 
} 

Я задаюсь вопросом, как найти термин «autoexec.bat» в наиболее effiecient образом, Далее для дерева файлов есть ли лучший способ для реализации то же самое в Node.js или C++? Я хочу реализовать такие функции, как поиск и т. Д.

ответ

2

Я бы сказал: не делайте этого в одном гигантском документе. Пусть каждый файл является собственным документом в коллекции со ссылками на родительские и (возможно) дочерние элементы. Почти все операции теперь тривиальны. Вам нужно только подумать об эффективном способе чтения/удаления всего дерева.

+0

чтение/удаление всего дерева будет удалять первый элемент и бум остальное уходит, но все же .. как найти файл? есть ли возможный способ? – ShrekOverflow

+0

Без бум. Остальные станут сиротами (когда каждый файл является отдельным документом). –

+0

Хм, о да! Я тоже думал о javascriptish .. – ShrekOverflow

0

На прошлой неделе в MongoNYC Kyle Banker дал хороший пример talk на схеме. Я думаю, что ваша проблема очень похожа на его первый пример музыкальной иерархии жанра.

Фактически каждый файл будет иметь документ в коллекции. Он должен иметь родительское поле для идентификации своего прямого родителя (каталог, в котором он находится в вашем случае) и массив всех его предков.

Запросы, которые теперь стали просто являются - какой каталог является файл «autoexec.bat» в - список всех файлов в директории «Foo» - список всех файлов рекурсивно в каталоге Foo (все файлы с «Foo» в его предки.

И не забывайте, что у вас также есть возможность сохранить полное имя пути в файле/каталоге, а также его базовое имя. Это позволяет выполнять поиск по ведущим частям пути, если поле индексируется. Он также будет уникальным, в отличие от имени файла.

Как всегда, ключевые фрагменты информации - все, что вам нужно будет запросить у этого коллектива а также ожидания производительности и нагрузки. Без этого, может быть легко выбрать схему, которая позже даст вам некоторые проблемы.

Смежные вопросы