|
|
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Есть имя файла, его полный путь и ключевые слова. Имя и, соответственно, полный путь у каждого файла уникальны. У каждого файла может быть неограниченое число ключевых слов (без повторений). Подозреваю, что тут придётся использовать внешние ключи, но не соображу как. Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей. Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова. Помогите, пожалуйста, организовать бд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 10:47:35 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, как вариант три таблицы: 1) таблица файлов с полями: id_file file_name 2)таблица слов : id_word word_name 3) таблица связей: id_file id_word ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:01:58 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Если сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word». Если я ошибаюсь, то тогда объясните, пожалуйста, как эти связи использовать, ведь к одному файлу принадлежат сразу несколько десятков ключевых слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:23:08 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Получается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:29:58 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЕсли сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word». Если я ошибаюсь, то тогда объясните, пожалуйста, как эти связи использовать, ведь к одному файлу принадлежат сразу несколько десятков ключевых слов. Все можно, но числовой ключ на мой взгляд все-таки лучше чем varchar. Если делать "file_name, word_name" - то в других таблицах нет необходимости. На мой взгляд таблица с именем файлов может содержать и др. инфу (размер, дату, кто предоставил...) Со словами - одно слово может относиться к разным файлам. Дело вкуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:30:11 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkПолучается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны). Ну почему же это избыточность? Есть такое понятие как нормализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:33:30 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Да, в таблицу с именем файлов будут помещены ещё и пути к ним. Это добавляет жизни третьей таблице связей. Я отолько учусь (самостоятельно. Кстати почитал только что про нормализацию, спасибо:-)), поэтому переспрошу ещё раз — вот такое наполнение таблицы связей нормальное получается?: id_file_1 — id_word_34 id_file_1 — id_word_35 id_file_1 — id_word_31 id_file_1 — id_word_98 id_file_1 — id_word_56 id_file_1 — id_word_42 id_file_1 — id_word_12 id_file_2 — id_word_54 id_file_2 — id_word_22 id_file_2 — id_word_34 id_file_2 — id_word_11 id_file_2 — id_word_09 id_file_3 — id_word_22 id_file_3 — id_word_23 Это нормально, что так много id_file одинаковых? Их как-то можно сократить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:52:09 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkДа, в таблицу с именем файлов будут помещены ещё и пути к ним. Это добавляет жизни третьей таблице связей. Я отолько учусь (самостоятельно. Кстати почитал только что про нормализацию, спасибо:-)), поэтому переспрошу ещё раз — вот такое наполнение таблицы связей нормальное получается?: id_file_1 — id_word_34 id_file_1 — id_word_35 id_file_1 — id_word_31 id_file_1 — id_word_98 id_file_1 — id_word_56 id_file_1 — id_word_42 id_file_1 — id_word_12 id_file_2 — id_word_54 id_file_2 — id_word_22 id_file_2 — id_word_34 id_file_2 — id_word_11 id_file_2 — id_word_09 id_file_3 — id_word_22 id_file_3 — id_word_23 Это нормально, что так много id_file одинаковых? Их как-то можно сократить? Хочешь ты этого или нет, но связь файл - слово должна быть (или id_файла - слово или id_файла - id_слова). Или использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель. Все подходы имеют право на жизнь, их нужно учитывать при поиске. (для другого подхода последовательность слов - важна и искать like '%слово1%слово2%' вернет результат, а искать like '%слово2%слово1%' - нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:03:54 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly BИли использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель. Т. е. в одном поле name_word будут целые строки из слов с разделителями? Не. лучше пусть в таблице связей будут повторения. Получается так: мы запрашиваем слово, бд ищет его айди, потом в таблице связей ищет все строки со значением нашего айди в поле id_file и массивом выводит все соответствующие значения из поля id_word? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:14:30 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
* мы запрашиваем ФАЙЛ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:16:05 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk* мы запрашиваем ФАЙЛ Ну да, можно одним запросом: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:18:27 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Спасибо, буду ковыряться дальше пока. Попробую оргранизовать тройную табличность и проверю логику необходимого функционала с ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:34:50 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Посчитал тут длинну таблицы связей в строках и мне плохо стало))) Предположим, что будет 100,000 пользователей, у каждого пользователя по 100,000 файлов, у каждого файла по 50 ключевых слов — итого: 100,000×100,000×50=500,000,000,000 (строк). Это нормально???))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 15:48:22 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkПредположим, что будет 100,000 пользователей, у каждого пользователя по 100,000 файлов, Гы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных. 100 тыс - прогнозируемая заполненность из реальной жизни? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 16:10:21 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly BГы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных. 100 тыс - прогнозируемая заполненность из реальной жизни? Пока теоретически. Но какая разница, а вдруг) Что потом делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 16:36:24 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Да, кстати — как оптимизировать хранение и поиск в большом объеме данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 16:37:15 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, перед тем как кодить, сначала проводят анализ для чего это делается, какие поиски будут, по каким критериям, каков ориентировочный объем,... Если данных много и их можно поделить на более мелкие "аля независимые части" можно сделать партицирование (скажем партиции по первой букве слова). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 17:10:17 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly B, Т. е. эти 500 млд строк просто разбить на таблицы — сделать из одной таблицы связей несколько? Я к чему: т. е. принципиально ничего в логике не поменяется, просто облать выборки сузится за счёт разделения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 17:56:57 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЕсть имя файла, его полный путь и ключевые слова. Имя и, соответственно, полный путь у каждого файла уникальны. У каждого файла может быть неограниченое число ключевых слов (без повторений). Подозреваю, что тут придётся использовать внешние ключи, но не соображу как. Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей. Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова. Помогите, пожалуйста, организовать бд. как вариант (может и не подойти): http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html теряется структура тегов, зато сработает из коробки. Теги просто навалить в стринговое поле через пробел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 20:27:51 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Не, ребята, для меня это ещё круто, да ещё на английском. Я пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 21:11:01 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 05:54:55 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirandrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног... Как же зае**ли умники на всех форумах. Я не знаю, будет у меня 500 млрд записей или нет, я их и не собираюсь делать, и скорее всего не будет, но ведь теоретически такая ситуация возможна, не обязательно у меня, а вообще возможна — ТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ. за***ли уже узколобые, которые не могут понять простой вещи, что люди спрашивают не только из практических нужд, но иногда еще и из гепотетических. Ну вот, бл?*:!, мне интересно… Достали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 08:34:10 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЯ не знаю, будет у меня 500 млрд записей или нетЗато я знаю. Не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 12:03:53 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ? Итак, уважаемый andrejk, вы хотели узнать andrejkкак оптимизировать хранение и поиск в большом объеме данных? Ответ такой: забудьте про оптимизацию и поиск. Если вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:30:36 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
ТриггерманЕсли вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД). Разработка продуманной структуры - первый шаг оптимизации, да и поиски должны быть продуманы перед заполнением таблиц. Как СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:40:23 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=164&tid=1834285]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
22ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 305ms |

| 0 / 0 |
