|
|
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
ElenaTomsk, народ в интернете говорит что это от нехватки места вообше или в ТЕМП директории. Кто-то советует пересоздать, уменьшить количество индексов. Возможно имеет смысл оптимизировать по датапотоку: Обрабатывать кусками по 5-10%. Если есть возможность, хорошо бы за параллелить, но это надо знать конкретно что вы написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 16:08:29 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
javajdbc, Здравствуйте. Дело в том, что я это тоже все уже прочитала и в своем предыдущем сообщении написала. Место есть, оперативной памяти тоже много, поэтому совершенно непонятно, что не работает. Код это не мой вовсе, это tanglir написал, за что я ему очень благодарна, просто он не работает на моих данных настоящих. Последний его код в этой ветке написаный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 19:42:03 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
ElenaTomsk, Пожалуйста, всегда давайте точные ссылки. Вы про этот 16735620 код или какой? Если по ссылке, то это генератор. Для конкретного анализа нужен код который сей генератор создал. Этот код 16715202 , как я понимаю был с ошибкой и генератор потом был улучшен. Таким образом, нужно: 1. реально сгенерированый код. 2. его ( ЕКСПЛЕЙН ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 20:20:16 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
... и чтоб два раз не вставать. 1. ЕКПЛЕЙН сделать на реальной базе (не волнуйтесь, это занимает секунду) 2. Когда вы получите сгенерированый код с кучей CROSS JOIN сделайте и покажите ресультат: select count(1) from <table> где <табле> замените (по одной за раз) на все подряд таблицы с CROSS JOIN. Т.е должно быть 5-8 результатов COUNT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 20:30:42 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
В принципе, если можно гарантировать, что ид фиксированных слов никогда не будут ссылаться на отсутствующие ид, то можно в генераторе лефтджойны заменить (секция "when 14" во втором групконкате) на просто джойны - может, оптимизатору станет полегче. Можно ещё ордербай убрать, вам же неважно, какие именно 20 результатов выйдут, или важно? Ну и таки да, ждём эксплейн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 05:22:15 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
tanglir, Здравствуйте! Очень рада, что вы ответили!!! Знаете, у меня на боевых таблица, я их переделала немного названия, получается вот такой код для выполнения: Код: sql 1. 2. 3. 4. 5. 6. и здесь есть вот здесь punctuat12 и punctuat18. Они у меня есть в tbl_templatedetail, в этих позициях, то-есть 12 и 18, но в собственно джойнах нет кода, последний tbl_punctuation punctuat10. Кроме того, как я поняла вашу логику, все значения из таблицы tbl_punctuation просто добавляются cross joinom, но это же тоже неверно, у меня же на нужном месте стоит или запятая или тире или еще что-нибудь одно, пунктуация, это просто разновидность фиксированных слов. ТАКже прикладываю explain который сделался если я убираю из вышеприведенного кода как раз эти ссылки на punctuat, инече запрос не запускается совсем. Извините, вы только не обижайтесь, пожалуйста, но может быть, я могу вам как-то оплатить работу? Потому что получается, что вы столько для меня делаете просто так, неудобно очень. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 21:33:12 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
javajdbc, Здравствуйте. Вот такие у меня результаты по выборке из каждой таблицы с explain: по прилагательным так 1 SIMPLE tbl_adjective index (null) FK_tbl_adjective_tbl_comparison_Id_Comparison 1 (null) 390 Using index по существительным так 1 SIMPLE tbl_noun index (null) FK_tbl_noun_tbl_wordnumber_Id_WordNumber 1 (null) 528 Using index по глаголам так 1 SIMPLE tv index (null) FK_tbl_verb_tbl_infinitive_Id_Infinitive 1 (null) 157 Using index по знакам препинания 1 SIMPLE tp index (null) PRIMARY 4 (null) 12 Using index по фиксированным словам так вот 1 SIMPLE tf index (null) UI_cWord 198 (null) 2978 Using index Вот я знаете не понимаю, почему только в последнем случае используются уникальный индекс, первичный ключ тоже не используется, при том что он есть у меня во всех таблицах, а почему-то используются индексы FK. Я думала, что при count должен использоваться именно PK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 21:47:06 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
ElenaTomsk, Елена, плохо отформатированый код -- сильно мешает.... сильно. Вместо того что что-то умное (или не умное) сказать, сначала я потратил 10 минут на форматирование: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 22:01:33 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
javajdbc, у меня так программа выдает, не знаю, как ее форматировать. Но посмотрела сейчас выполнение, действительно не хватает дискового пространства, но это просто ужасно! Выполнялось это примерно 5 минут и забрало 38 гигабайт на диске, больше просто нет и оно умерло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 22:23:37 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
tanglir, Ой, я когда убрала вот сейчас order by, знаете, оно сразу выполнилось, моментально! Скаожите пожалуйста, почему такая разница получается от просто сортировки, вот перед этим запускала, было пять минут и сьело весь диск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 22:35:34 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
ElenaTomskjavajdbc, у меня так программа выдает, не знаю, как ее форматировать. Но посмотрела сейчас выполнение, действительно не хватает дискового пространства, но это просто ужасно! Выполнялось это примерно 5 минут и забрало 38 гигабайт на диске, больше просто нет и оно умерло. 1. форматировать можно ручками, и во многих программах есть опция ФОРМАТ (например в MySQL Workbench) 2. ОРДЕР БУ заставляет прграмму перебрать ВСЕ варинаты, их у вас громадное количество и они забивают диск. Если убрать ОРДЕР БУ то програма мгновено наберет первые 10 и выйдет по ЛИМИТ 10 3. по оптимизации пока не смотрел, может позже сегодня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 23:36:39 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
ElenaTomskjavajdbc, Здравствуйте. Вот такие у меня результаты по выборке из каждой таблицы с explain: по прилагательным так 1 SIMPLE tbl_adjective index (null) FK_tbl_adjective_tbl_comparison_Id_Comparison 1 (null) 390 Using index по существительным так 1 SIMPLE tbl_noun index (null) FK_tbl_noun_tbl_wordnumber_Id_WordNumber 1 (null) 528 Using index по глаголам так 1 SIMPLE tv index (null) FK_tbl_verb_tbl_infinitive_Id_Infinitive 1 (null) 157 Using index по знакам препинания 1 SIMPLE tp index (null) PRIMARY 4 (null) 12 Using index по фиксированным словам так вот 1 SIMPLE tf index (null) UI_cWord 198 (null) 2978 Using index Вот я знаете не понимаю, почему только в последнем случае используются уникальный индекс, первичный ключ тоже не используется, при том что он есть у меня во всех таблицах, а почему-то используются индексы FK. Я думала, что при count должен использоваться именно PK. ну вообшето я спрашивал результат КАУТА а не ЕХПЛАИН этих маленьких СКЛов. НО ЕХПЛАИН на самом деле показывает примерное количетво записей и этого достаточно. В виду специфики задания -- система должна "перемножить" 390 ажиктивов на 528 наунов на...на...на... прочем столько раз сколько переменных слов в предложении. Результат получается громадное чило записей и они убивают диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 23:58:31 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 00:00:21 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
Елена, напомните, плиз, 1. если слово фиксированое, то его ВОБШЕ трогать не надо? 2. темплейты относятся только к переменным словам? 3. подвердите (или опровергинете) что все пунктуации на самом деле фиксированы. Если так, можно ли слить их в фиксированые слова? 4. сгенерированый СКЛ вызывает несколько вопросов (типа #1 и #2 вверху). МОжете ли вы подвердить что логика сгенерированого запроса верная? 5. Если сможете, попробуйте БЕЗ генератора самой составить СКЛ для какого нибудь конкретного единичного предложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 00:08:00 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
javajdbc, Здравствуйте. Фиксированные слова, да. Они не меняются. Теплейтдетайл содержит в себе полное описание всей фразы. В нем и изменяемые и неизменяемые слова. Знаки препинания можно было бы вынести в фиксированные, но зачем? У меня их всего 12, а фиксированных слов больше, конечно, там есть идекс у меня, только все равно не понятно, зачем сливать. Я их специально разделяла для достижения максимальной скорости. То как работает код от tanglir, очень похоже на то, что мне нужно, но окончательно не могу сказать, потому что не получается полную фразу сделать пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 09:53:24 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
tanglir, с тем, почему пропадают куда-то punctuation12 и так далее - тоже разобралась. Не хватает длины varchar, даже максимальной, поставила mediumtext и все стало нормально! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 15:13:05 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
ElenaTomskjavajdbc, Здравствуйте. Фиксированные слова, да. Они не меняются. Теплейтдетайл содержит в себе полное описание всей фразы. В нем и изменяемые и неизменяемые слова. Знаки препинания можно было бы вынести в фиксированные, но зачем? У меня их всего 12, а фиксированных слов больше, конечно, там есть идекс у меня, только все равно не понятно, зачем сливать. Я их специально разделяла для достижения максимальной скорости. То как работает код от tanglir, очень похоже на то, что мне нужно, но окончательно не могу сказать, потому что не получается полную фразу сделать пока. 1. если между фиксированым словом и фиксированой пунктуации нет функциональной разницы, то слить их надо. В генераторе Танглира пунктуация отрабатывается как "переменная" и выдает кучу (как оказалось сейчас) ненужных кросс жоинтов. 2. для проверки логической корректности решения -- умешите количество записей в базе и уменьшите длину предложения, скажем 3 фиксированых и 2 переменных слова. 3. знаете ли вы что такое денормализация? Кто вам составил схему? Ваша схема какято дуальная, с одной стороны непонятно зачем разные типы слов вынесены в разные таблицы, а с другой стороны используются ИД слов вместо более привычного САМОГО слова как ИД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 18:59:48 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
javajdbc, Можно не добавлять в таблицу, а просто переделатаь код, что я и сделала. Теперь стало правильно подбирать пунктуацию. Что такое денормализация, я знаю. И еще я знаю, что нормализация куда лучше, не вижу никаких плюсов от слияния, извините. Код получился вот такой, непонятно только одно, может быть, можно как-то сделать чтобы не генерировать его заново каждый раз? Или я глупости говорю? :( Очень смущает большое колличество джойнов к одной и то же таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2014, 23:35:59 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
>> javajdbc, >> Можно не добавлять в таблицу, а просто переделатаь код, что я и сделала. >> Теперь стало правильно подбирать пунктуацию. OK, в генераторе изменени вроде правильно. ПО любому имеет смысл показывать результат генерации тоже. >> Что такое денормализация, я знаю. >> И еще я знаю, что нормализация куда лучше, >> не вижу никаких плюсов от слияния, я говорил про две (несвязаные) вещи: -- слияние пунктуации и фиксированых слов -- денормализация -- замена ИД слова на само слово во избежании дополнительных жоинтов >> извините. Не надо извинятся. Задачу можно решить разными способами. В том числе и без слияния и без денормализации. Пока надо сделать ЛЮБОЙ логическио правильно работаюший вариант. Вернемся к оптимизации после логической валидации решения. >> Код получился вот такой, непонятно только одно, >> может быть, можно как-то сделать чтобы не генерировать >> его заново каждый раз? К сожалению, чистой СКЛ не позволяет сделать то что вы хотите. По определению -- СКЛ требуюет знать связки в момент написания, а у вас в момент выполнения может оказатся разные связки. Теоретически, ЕСЛИ у вас конечное (не больше чем Н) количество слов в предложении и ЕСЛИ у вас конечное число типов слов (не нольше чем М), то можно написать СУМАШЕДШИЙ и ОЧЕНЬ МЕДЛЕНЫЙ скл с перемножением всех М типов на каждом из Н слов. Остается только генерации СКЛ на лету для каждого предложения. Напромер как предложил Танглир или на жаве/ц#/руби итд. >> Или я глупости говорю? :( Вы имеете право говорить и желать все что угодно. Ответ остается в силе: В пределах СКЛ ваша задача (практически) не решается. С использованием Stored Procedures или других языков -- пожалуйста. >> Очень смущает большое >> колличество джойнов к одной и то же таблице. Ответ простой -- один жоинт на каждое переменое слово. У вас будет 20 переменых слов в предложении -- будет 20 жоинтов. (Жоинты на фиксированые слова можно не считать, они быстрые. К томуже по логике не нужны и легко убираются легкой денормализацией). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2014, 07:20:22 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
javajdbc, А разве нельзя сделать один джойн к таблице изменяемых слов? Или оптимизатор сам поймет, что несколько раз подключиться к одной таблице ненужно? А можно сделать джойн с функциями или хранимиыми процедурами? Имеющийся код уже очень трудно читается, а мне еще нужно добавить к нему еще более совсем сложные конструкции. Если бы вот можно было бы куски с джойнами по фиксированным например словам бы вынести бы куда-то в функцию, она бы уже вернула рекордсет и с ним джойн. А саму функцию изменять было бы проще. Но видимо функцию нельзя, она же одно значение всегда возвращает, а надо много. Как-то иначе можно? все также не могу понять, зачем объединять таблицы фиксированных слов и пунктуацию, какой от этого выигрышь, кроме упрощения написания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2014, 12:20:49 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
>> А разве нельзя сделать один джойн к таблице изменяемых слов? >> Или оптимизатор сам поймет, что несколько раз подключиться к одной таблице ненужно? Вы поставили задачу: на КАЖДОЕ переменое слово перебрать варианты. КАЖДЫЙ перебор есть новый джоин (если мы делаем это на СКЛ) >> А можно сделать джойн с функциями или хранимиыми процедурами? Имеющийся код уже очень трудно читается, а мне еще нужно добавить к нему еще более совсем сложные конструкции. Если бы вот можно было бы куски с джойнами по фиксированным например словам бы вынести бы куда-то в функцию, она бы уже вернула рекордсет и с ним джойн. А саму функцию изменять было бы проще. Но видимо функцию нельзя, она же одно значение всегда возвращает, а надо много. Как-то иначе можно? Вот! мы подходим к идее расширить рамки за пределы (чистого) СКЛа. Можно создать такую програму на ЛЮБОМ языке - хранимые процедурым, жава, фортран, идт. По сути, програма ниже делает тоже самое что и генератор Танглира. - - - - - - - - Входная переменая ПРЕДЛОЖЕНИЕ(список слов с типами) ВЫходная переменая РЕСАЛТ_СЕТ(список предложений) для каждого СЛОВО из ПРЕДЛОЖЕНИЕ СТАРТ ЕСЛИ СЛОВО.тип==фикс то "добавать слово в РЕСАЛТ_СЕТ". АЛИ-НЕТ то селект соответствуюшие ВАРИАНТЫ из таблицы и "добавить ВАРИНАТЫ в РЕСУЛТ_СЕТ" ЕНД вернуть РЕСУЛТ_СЕТ - - - - - - - процедура "добавать слово в РЕСАЛТ_СЕТ" и "добавить ВАРИНАТЫ в РЕСУЛТ_СЕТ" будут довольно простые тоже. Конечно, если у вас 100 переменых по 10 тысяч варинатов -- вы убьете компютер хоть на СКЛ, хоть на любом языке. - - - - - - - - >> все также не могу понять, зачем объединять таблицы фиксированных >> слов и пунктуацию, какой от этого выигрышь, кроме упрощения написания. Слитием всех фиксированых фрагментов, а также слитием ВСЕ слов в одну таблицу вы сильно упростите генератор без практически никакой потери скорости. Упрошение генератора -- меньше ошибок и лучшая читабельность и понимание происходяшего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2014, 18:15:48 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
javajdbc, Большое спасибо за советы. Наверное, дальше я уже сама все доделаю, есть только один самый последний вопрос. Он скорее к tanglir, но может быть вы тоже знаете? Как можно сделать, так, чтобы не попадали дубли? Наверное, я сама тоже знаю, надо применить Distinct. Но может быть можно сделать так, чтобы они эти дубли просто сразу не попадали, какое-то там условие добавить. Извините, если я глупости говорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 21:57:22 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
ElenaTomsk, дубли чего? По идее каждое предложение и так будет уникально, если дублей слов нет в исходных таблицах. Или вы про "дубли" с одинаковыми словами, но разной пунктуацией? Так переделайте код для пунктуации по аналогии с кодом для фикс. слов (я уже это предлагал), и эти "дубли" исчезнут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 05:33:02 |
|
||
|
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
|
|||
|---|---|---|---|
|
#18+
tanglir, Здравствуйте. Я просто плохо описываю, наверное. Потому что хочется самой разобраться, но не получается. У меня там есть еще дополнительные настройки, которые помогают работать с предложениями. Например, описание должностей или описание действий, или по возрасту группировка, много еще всяких условий. Это лежит в двух дополнительных таблицах tbl_subdirection and tbl_attribute. Между ними и деталями темплейта установлена связь, это таблицы tbl_l_templatedetail_subdirection и tbl_l_templatedetail_attribute. И такие же таблицы есть для связи с существительным: tbl_l_noun_subdirection and tbl_l_noun_attribute. tbl_subdirection может только одно значение содержать, а вот атрибуты много : нампример студент и солдат могут быть такими атрибутами: 1 молодые люди 2 мужчины Дальше пользователь назначает, какие именно атрибуты могут использоваться и должны отбираться слова только такие, какие имеют этот атрибут. На каждое изменяемое слово могут быть свои атрибуты, разные. Вот так. И я вот такой запрос написала, но только очень много дублей получается, а значит я ошиблась где-то. У вас было cross join noun у меня стало cross join (SELECT n.Nominative, na.Id_Attribute FROM tbl_templatedetail tt JOIN tbl_l_templatedetail_subdirection ts ON tt.Id_TemplateDetail = ts.Id_TemplateDetail JOIN tbl_l_templatedetail_attribute ta ON tt.Id_TemplateDetail = ta.Id_TemplateDetail JOIN tbl_l_noun_subdirection ns ON ts.Id_SubDirection = ns.Id_SubDirection JOIN tbl_l_noun_attribute na ON ta.Id_Attribute = na.Id_Attribute JOIN tbl_noun n ON ns.Id_Noun = n.Id_Noun WHERE tt.Id_Template = 3 AND tt.Id_WordClass = 10) noun Но это не работает потому что много дублей и потому что все равно не получается правильные атрибуты для каждого слова отобрать почему-то. Получается что все атрибуты вместе назначаются на каждое слово, по-моему. А с фиксированными словами я уже все поменяла ! Работает хорошо и правильно !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2014, 21:23:30 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38792245&tid=1833854]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
96ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 448ms |

| 0 / 0 |
