Хранение древовидных структур в mysql(+)

12
Sherman
На сайте с 13.01.2005
Offline
34
3171

Собственно, проблема в следующем.

Давно хотел сделать поиск(файловый/ftp/etc). Возникла проблема: как хранить индекс.

Объемы данных, примерно:

Сотни серверов, миллионы файлов и папок.

СУБД. Хочется open source, т.к. предполагается, что работать это все будет на unix-системах и с весьма скромным бюджетом.

Но, как вариант, рассматривается и SQL Server.

Поиск хочу сделать не полнотекстным(т.е. средства предоставляемые той или иной СУБД мне не подходят).

Вопрос в следующем. Какой будет оптимальный алгоритм хранения древовидной структуры в СУБД.

Понятно, что «рекурсивный» parentid id мы не рассматриваем.

Nested Sets наверное тоже не подходит, т.к. здесь не только частая выборка, но и весьма частая вставка, и каждый раз перестраивать все дерево — ресурсов не напасешься.

Вообще возможно на таких данных делать неполнотекстный поиск по СУБД или стоит задуматься о хранении индекса отдельно(скажем в файлах).

p.s. машинка у меня не очень мощная. Athlon 1700 xp, 2x256 RAM, SATA-винт 200 ГБ.

Считаешь, что у тебя есть мозги? Тогда тебе сюда (http://kevan.org/brain.cgi?Sheryld). Персональное:Габайдулин «Sherman» Денис (http://dasblog.pp.ru)
Andreyka
На сайте с 19.02.2005
Offline
822
#1

Пардон, но "Сотни серверов" не сочетаются с "весьма скромным бюджетом".

Не стоит плодить сущности без необходимости
[Удален]
#2

Sherman, я бы на вашем месте думал в сторону файлов и ReiserFS. Mysql вообще не вариант, т. к. MyISAM скопытится на выборках, а InnoDB на вставках. :)

M
На сайте с 01.06.2005
Offline
0
#3

Однако-ж сам видел работающую систему на MySQL. Проиндексированно ~500 серверов, ~6 000 000 файлов. Количество запросов ~0.1 в секунду. Машина класса PIII, 512mb памяти под управлением Debian Linux. Так что MySQL вполне вариант.

tester999
На сайте с 21.10.2004
Offline
149
#4

FireBird ?

Sherman
На сайте с 13.01.2005
Offline
34
#5
Как писал Miroff
Однако-ж сам видел работающую систему на MySQL. Проиндексированно ~500 серверов, ~6 000 000 файлов. Количество запросов ~0.1 в секунду. Машина класса PIII, 512mb памяти под управлением Debian Linux. Так что MySQL вполне вариант.

И все же. Давайте обсудим, какова будет более менее оптимальная сруктура индекса в СУБД с сохранением информации о дереве.

Sherman
На сайте с 13.01.2005
Offline
34
#6

Вот, например: http://wildhoney.netbynet.ru — используется вроде PostgreSQL.

E
На сайте с 12.01.2004
Offline
17
#7

А зачем хранить дерево?

Если предполагается искать только по именам файлов (или по полному пути) то можно представить файл как документ состоящий из слов которые содержатся в имени файла. И строить индекс по этим словам.

lagif
На сайте с 15.12.2004
Offline
30
#8
...MyISAM скопытится на выборках, а InnoDB на вставках...

Не могу не пожаловаться: у меня, после недели непрерывной работы таки почти скопытилась :) Журнал она, вишь ли, ведет... зафлудила inod...

А может, Oracle попробовать?

Это тоже пройдет...
M
На сайте с 01.06.2005
Offline
0
#9

Sherman, Вы бы определились чего вы хотите от базы. Если нужно просто искать файлы, то зачем вам дерево? Я, например, сделал выделил на каждый сервер по одной таблице и разом избавился от всякого геморойя со вставкой. При переиндексации убиваем старую таблицу и создаем новую. Работает в разы быстрее. От полнотекстового поиска ИМХО вы отказываетесь зря. Как показывает практика, он достаточно шустро работает, и выдает достаточно качественный результат.

tester999,

AFAIK, interbase и иже с ним на таких данных молча курят в сторонке.

Sherman
На сайте с 13.01.2005
Offline
34
#10

Дерево нужно обязательно, т.к. структура будет использоваться весьма активно, группировки, сортировки и т.д. и т.п.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий