|
|
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly B, Всё, что вы сможете сделать - это разработать грамотную структуру БД. Всё остальное - будут делать СУБД и железо, на котором она работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:50:02 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЯ пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания. andrejkДа, кстати — как оптимизировать хранение и поиск в большом объеме данных? Раздели эти две задачи. Реши первую, проверь макс. задержки, найди что не нравится..... По оптимизации погугли общие рекомендации, поищи книжечки, статейки. Ну а в целом каждая задача имеет свои особенности. Если строк в таблице ... ну очень много, для этого есть свои СУБД, для примера Elasticsearch. Но это уже 2 задача ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:51:02 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly BКак СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш? Будет держать в кэше только активную часть данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 15:06:42 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Понятное дело, что теоретически бд может расти бесконечно, тут ничего не поделаешь. Проблема, которую я хочу решить, это избавиться от роста в геометрической прогрессии, т. к. трёхтабличная архитектура бд (как предлагалось выше и как я пробую сделать) вынуждает поле связей расти сразу на несколько десятков строк при добавлениии в бд всего одного файла с ключевыми словами. Чтобы было понятно, попробу изложить задачу и текущий алгоритм решения. Задача: — вносить в бд с одной стороны ключевые слова, а с другой информацию о файле (его имя и путь к нему); — закреплять за этим файлом (привязывать к нему) некоторые ключевые слова; — по заданному ключевому слову искать в бд все другие ключевые слова, привязанные к файлам, к которым привязано и заданное ключевое слово; — выводить найденные ключевые слова списком с сортировкой по частоте встречания в пределах условия поиска. А вот как я решил запрос к бд (спасибо Anatoly B за скелет запроса): <?php if ($_POST["podobrat"] & $_POST["kluch_slovo"]) { $podkluchenie = mysql_connect("***","***","***") or die("MySQL сервер недоступен!".mysql_error()); mysql_query(" SET character_set_database=utf8 "); mysql_query(" SET NAMES utf8 "); mysql_select_db( "webart_servis_kluchevyx_slov", $podkluchenie) or die("MySQL сервер недоступен!".mysql_error()); $kluch_slovo = $_POST["kluch_slovo"]; $rezultat_podbora = mysql_query(" SELECT `slova` FROM `tablitzca_slov` WHERE `id` in (SELECT `id_slova` FROM `tablizca_svyazej` WHERE `id_izobrazheniya` in (SELECT `id_izobrazheniya` FROM `tablizca_svyazej` WHERE `id_slova` in (SELECT `id` FROM `tablitzca_slov` WHERE `slova` = '".$kluch_slovo."'))) "); while ($data = mysql_fetch_array($rezultat_podbora)) { echo "<input type=\"checkbox\" name=\"checkbox\" checked=\"checked\"> " . $data['slova'] . "<br>"; } mysql_close($podkluchenie); } ?> Бедная получается таблица связей, расти будет как на дрожжах — это для каждого файла нужно будет прописать в ней сразу несколько строк под каждое привязанное слово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 17:51:45 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Блин, как код оформить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 17:52:25 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkБлин, как код оформить?тег [ src ] andrejkэто избавиться от роста в геометрической прогрессии , т. к. трёхтабличная архитектура бд (как предлагалось выше и как я пробую сделать) вынуждает поле связей расти сразу на несколько десятков строк при добавлениии в бд всего одного файла с ключевыми словами.Это не геометрическая прогрессия. Геометрическая - это если бы для каждого нового файла приходилось бы добавлять в N раз больше записей, чем для предыдущего. И даже не арифметическая :) Ну а как вы хотели? Или так, или пихать все слова в одну строку. Недостатков у такого решения имхо больше: 1)не факт, что это будет занимать меньше места; если слова часто повторяются, то скорее будет даже больше 2)поиск по обычным индексам в таком варианте пролетает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 05:04:22 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirЭто не геометрическая прогрессия. … И даже не арифметическая Это я так страху нагоняю)) А вы бы как решили такую задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 06:03:53 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, либо этот вариант, либо все ключевые слова в одно поле рядом с файлом, и полнотекст на это поле. В рамках мускля других вариантов пожалуй что и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 06:38:49 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Думал ещё такой вариант — всё в одну таблицу: | имя файла | слово1 | … | словоN | //строка полей ============================= | имя1 | false | … | true | ------------------------------------- | имя2 | false | … | false | ------------------------------------- | имя3 | true | … | true | … Поиск связей между файлами и словами делается по логическим значениям true и false. Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:01:33 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkДумал ещё такой вариант — всё в одну таблицу: | имя файла | слово1 | … | словоN | //строка полей ============================= | имя1 | false | … | true | ------------------------------------- | имя2 | false | … | false | ------------------------------------- | имя3 | true | … | true | … Поиск связей между файлами и словами делается по логическим значениям true и false. Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно?Гениально! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:02:33 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
ТриггерманAnatoly B, Всё, что вы сможете сделать - это разработать грамотную структуру БД. Всё остальное - будут делать СУБД и железо, на котором она работает. Dimitry SibiryakovAnatoly BКак СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш? Будет держать в кэше только активную часть данных. Это понятно, что "впихнуть невпихуемое"(с) нельзя. Вот и вопрос как СУБД будет решать проблему оптимизации запроса, который приводит к постоянному чтению диска и лопатит тонны информации. Мой ответ - никак. Только изменяя сам запрос, наложение ограничений на рез-т и поисковые критерии ... можно (попробовать) упростить/ускорить запрос, в конце концов поделить его на более мелкие.... И это не всегда очевидно на этапе разработки структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:22:37 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkДумал ещё такой вариант — всё в одну таблицу: | имя файла | слово1 | … | словоN | //строка полей ============================= | имя1 | false | … | true | ------------------------------------- | имя2 | false | … | false | ------------------------------------- | имя3 | true | … | true | … Поиск связей между файлами и словами делается по логическим значениям true и false. Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно? Ну всё же, конкретно по такому подходу, люди добрые, что можете сказать? Anatoly B , что вы про это думаете, если сравнить с трёхтабличной архитектурой, которую вы предлагали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:35:09 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkчто вы про это думаете, если сравнить с трёхтабличной архитектурой, которую вы предлагали? Ваша архитектура - бесподобна ! Вы - творчески одаренный талантливый программист-разработчик БД. Вам бы в Microsoft работать - им такие спецы ох как нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:39:08 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Да ничего я по этому не думаю, т.к. это не вариант. Добавления нового слова - это DDL операция, т.е. требуем блокировки таблицы + долго. Битовые индексы по всем полям делать - жуть. Занимаемый дисковый размер - будет больше на больших данных... Да и работать неудобно. Какое поле (словоN или словоМ) использовать чтобы найти искомое слово , скажем, "вариант". Делать массив соответствия "имя поля - слово "? Ну и далее в таком духе ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:43:02 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Понятно, остановлюсь на таблице связей. Пока она будет расти, надеюсь, успею изучить партицирование т. д.))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:51:54 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. 5. 6. Ребята, наткнулся ещё на одну головоломку. Вот этот запрос выдаёт все слова, которые привязаны к изображениям с исходным словом. Хочу сделать возможным поиск не по одному ключевому слову, привязанному к файлу, а сразу по нескольким (от одного до бесконечности). Т. е. результирующий список ключевых слов будет извлекаться только из тех файлов, в которых есть сразу все заданные изначально слова. Проблема вот в чём: не могу сообразить, как цикл совместить с запросом. Или, может, в языке SQL есть уже подобная функция? Если понятно изложил, подскажите, пожалуйста синтаксис запроса или хотябы логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 10:46:41 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЕсли понятно изложилНе совсем. Нужно найти файлы, привязанные к такому же (или более обширному) пулу тегов, что и заданный файл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 10:54:40 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Попробую на примере. Мы задаём, например, три ключевых слова для поиска. Бд ищет все файлы, к которым привязаны сразу все три наши заданные слова. Бд проверяет у всех найденных файлов связи с другими словами и выдаёт все связанные слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 11:01:32 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
ясно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 11:10:00 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
А сам запрос Код: plsql 1. 2. 3. 4. 5. 6. изменить нельзя, только другой писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 12:32:08 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, у вас тут куча IN-подзапросов. Ещё и вложенных. Если версия мускл 5.5 и ниже, то на объёме данных, отличном от смехотворного, запрос начнёт сурово тормозить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 12:57:22 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Может тогда можно их разбить на простые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 13:02:32 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirясно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Можете дать комментарии к синтаксису, а о в вашем примере много мне незнакомого) Не совсем понятны ваши условные обозначения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 13:04:54 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkНе совсем понятны ваши условные обозначенияа какие там вообще "обозначения"? ну разве имена таблиц, так вроде бы русскиманглийским языком написано: files - файлы, words - слова, files2words - связи (идфайла, идслова) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 13:08:34 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38698109&tid=1834285]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 380ms |

| 0 / 0 |
