* [sisyphus] postgresql index row @ 2010-11-12 2:05 Igor Zubkov 2010-11-12 7:47 ` Alexey I. Froloff ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Igor Zubkov @ 2010-11-12 2:05 UTC (permalink / raw) To: ALT Linux Sisyphus discussions Hi! Никто не сталкивался вот с таким? == AddIndexOnChangelogtext: migrating ======================================== -- add_index(:changelogs, :changelogtext) rake aborted! An error has occurred, this and all later migrations canceled: PGError: ERROR: index row requires 10744 bytes, maximum size is 8191 : CREATE INDEX "index_changelogs_on_changelogtext" ON "changelogs" ("changelogtext") (See full trace by running task with --trace) -- Igor Zubkov http://hi.im/ice ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 2:05 [sisyphus] postgresql index row Igor Zubkov @ 2010-11-12 7:47 ` Alexey I. Froloff 2010-11-12 16:06 ` Igor Zubkov 2010-11-12 9:58 ` Ivan Fedorov 2010-11-12 10:48 ` Денис Смирнов 2 siblings, 1 reply; 13+ messages in thread From: Alexey I. Froloff @ 2010-11-12 7:47 UTC (permalink / raw) To: ALT Linux Sisyphus discussion list [-- Attachment #1: Type: text/plain, Size: 280 bytes --] On Fri, Nov 12, 2010 at 04:05:03AM +0200, Igor Zubkov wrote: > == AddIndexOnChangelogtext: migrating ======================================== > -- add_index(:changelogs, :changelogtext) Занахрена? -- Regards, -- Sir Raorn. --- http://thousandsofhate.blogspot.com/ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 7:47 ` Alexey I. Froloff @ 2010-11-12 16:06 ` Igor Zubkov 2010-11-12 16:25 ` Alexey I. Froloff 2010-11-12 16:39 ` Денис Смирнов 0 siblings, 2 replies; 13+ messages in thread From: Igor Zubkov @ 2010-11-12 16:06 UTC (permalink / raw) To: ALT Linux Sisyphus discussions 2010/11/12 Alexey I. Froloff: > On Fri, Nov 12, 2010 at 04:05:03AM +0200, Igor Zubkov wrote: >> == AddIndexOnChangelogtext: migrating ======================================== >> -- add_index(:changelogs, :changelogtext) > Занахрена? Вот что бы такой запрос к БД работал быстро, а не как сейчас... ree-1.8.7-2010.02 > Changelog.where('changelogtext LIKE \'%CVE%\'').count => 4288 ree-1.8.7-2010.02 > 2010/11/12 Ivan Fedorov: > Igor Zubkov writes: >> Hi! >> >> Никто не сталкивался вот с таким? >> >> == AddIndexOnChangelogtext: migrating ======================================== >> -- add_index(:changelogs, :changelogtext) > Ну во первых и впрямь, "а нахрена?!". Для быстрого поиска. > А во вторых оно всё равно не будет хорошо работать. Если вам нужен поиск > по тексту - то надо пользоваться FTS движками. В PostgreSQL например > встроен tsearch2. Из отдельных - Sphinx весьма неплох, да и настроить не > имея опыта его проще чем tsearch2. Ммм... А Sphinx умеет правильно работать с бинарными полями? Просто это самое поле ещё и BINARY в postgresql у меня. > А обычные btree индексы нормально искать по тексту всё равно не > позволят. А если нужна проверка на уникальность, то там и индекса от > какого-нить хэша хватит. 2010/11/12 Денис Смирнов: > On Fri, Nov 12, 2010 at 04:05:03AM +0200, Igor Zubkov wrote: > > IZ> Никто не сталкивался вот с таким? > > А есть хоть какой-то смысл от _индекса_ по полю немеряного размера? Понятия не имею. :) > Даже если бы это работало -- это было бы все равно ужасно. Опиши какую > задачу ты хочешь решить этим странным действием, и тогда тебе подскажут > как ее решить красиво. Дано много-примного записей из changelog'ов пакетов. Примерно: ree-1.8.7-2010.02 > Changelog.count(:all) => 690859 ree-1.8.7-2010.02 > Столько :) Охота вытаскивать из этой кучи только те в которых есть упоминание о CVE. Без индекса это просто медленно. Индекс не делается. Вот думаю, а не воткнуть ли туда sphinx? Или как бы ещё решить такую задачку. -- Igor Zubkov http://hi.im/ice ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 16:06 ` Igor Zubkov @ 2010-11-12 16:25 ` Alexey I. Froloff 2010-11-12 16:44 ` Денис Смирнов 2010-11-12 16:39 ` Денис Смирнов 1 sibling, 1 reply; 13+ messages in thread From: Alexey I. Froloff @ 2010-11-12 16:25 UTC (permalink / raw) To: ALT Linux Sisyphus discussion list [-- Attachment #1: Type: text/plain, Size: 834 bytes --] On Fri, Nov 12, 2010 at 06:06:59PM +0200, Igor Zubkov wrote: > >> == AddIndexOnChangelogtext: migrating ======================================== > >> -- add_index(:changelogs, :changelogtext) > > Занахрена? > Вот что бы такой запрос к БД работал быстро, а не как сейчас... > ree-1.8.7-2010.02 > Changelog.where('changelogtext LIKE \'%CVE%\'').count > => 4288 > ree-1.8.7-2010.02 > "Шарик, ты балбес!" (ц) http://www.postgresql.org/docs/9.0/interactive/indexes-types.html """The optimizer can also use a B-tree index for queries involving the pattern matching operators LIKE and ~ *if* the pattern is a constant and is anchored to the beginning of the string -- for example, col LIKE 'foo%' or col ~ '^foo', but not col LIKE '%bar'.""" -- Regards, -- Sir Raorn. --- http://thousandsofhate.blogspot.com/ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 16:25 ` Alexey I. Froloff @ 2010-11-12 16:44 ` Денис Смирнов 0 siblings, 0 replies; 13+ messages in thread From: Денис Смирнов @ 2010-11-12 16:44 UTC (permalink / raw) To: ALT Linux Sisyphus discussions [-- Attachment #1: Type: text/plain, Size: 1021 bytes --] On Fri, Nov 12, 2010 at 07:25:42PM +0300, Alexey I. Froloff wrote: AIF> "Шарик, ты балбес!" (ц) AIF> http://www.postgresql.org/docs/9.0/interactive/indexes-types.html AIF> """The optimizer can also use a B-tree index for queries AIF> involving the pattern matching operators LIKE and ~ *if* the AIF> pattern is a constant and is anchored to the beginning of the AIF> string -- for example, col LIKE 'foo%' or col ~ '^foo', but AIF> not col LIKE '%bar'.""" Добавлю -- если понимать как работает b-tree индекс, то становится очевидным что работать иначе оно не может. Ибо он помогает только для операций сравнения. При этом x like 'abc%' это то же самое что: (x >= 'abc' AND x < 'abd'), и только поэтому индекс помогает в этой ситуации искать. При этом индексы по большим строкам -- безусловное зло, а их желание говорит о необходимости привести структуру базы в порядок. -- С уважением, Денис http://mithraen.ru/ ---------------------------------------------------------------------------- [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 16:06 ` Igor Zubkov 2010-11-12 16:25 ` Alexey I. Froloff @ 2010-11-12 16:39 ` Денис Смирнов 2010-11-13 6:23 ` Alex Gorbachenko 1 sibling, 1 reply; 13+ messages in thread From: Денис Смирнов @ 2010-11-12 16:39 UTC (permalink / raw) To: ALT Linux Sisyphus discussions [-- Attachment #1: Type: text/plain, Size: 2122 bytes --] On Fri, Nov 12, 2010 at 06:06:59PM +0200, Igor Zubkov wrote: IZ> Вот что бы такой запрос к БД работал быстро, а не как сейчас... IZ> ree-1.8.7-2010.02 > Changelog.where('changelogtext LIKE \'%CVE%\'').count IZ> => 4288 IZ> ree-1.8.7-2010.02 > Он не будет работать быстрее. Ибо индексы помогают только для поиска _префикса_. LIKE 'ABC%' -- использует индексы, а LIKE '%CVE%' -- увы, не испоьлзуют. IZ>>> == AddIndexOnChangelogtext: migrating ======================================== IZ>>> -- add_index(:changelogs, :changelogtext) IZ>> Ну во первых и впрямь, "а нахрена?!". IZ> Для быстрого поиска. Индесы это не просто "штука чтобы искать все было быстрее". Если бы было так -- просто создавали бы индексы на все колонки и радовались бы жизни :) Это штука, которая поможет искать быстрее, если применяется правильно. "Правильно" очень часто это изменение структуры базы, а не просто создание нужных индексов. >> Даже если бы это работало -- это было бы все равно ужасно. Опиши какую >> задачу ты хочешь решить этим странным действием, и тогда тебе подскажут >> как ее решить красиво. IZ> Дано много-примного записей из changelog'ов пакетов. Примерно: IZ> ree-1.8.7-2010.02 > Changelog.count(:all) IZ> => 690859 IZ> ree-1.8.7-2010.02 > IZ> Столько :) IZ> Охота вытаскивать из этой кучи только те в которых есть упоминание о IZ> CVE. Без индекса это просто медленно. Индекс не делается. IZ> Вот думаю, а не воткнуть ли туда sphinx? Или как бы ещё решить такую задачку. На этапе импортирования %chanelog в базу вытаскивать эти самые CVE. И класть в отдельную табличку с полями -- CVE,package,version к ней два индекса -- один по CVE, другой по паре package,version. version, разумеется, не в смысле %version, а полностью -- включая serial и release. Если нам приходится часто выполнять какой-то сложный запрос -- его не надо оптимизировать. Надо его ликвидировать, а предварительно заготовленный результат держать в отдельной табличке. -- С уважением, Денис http://mithraen.ru/ ---------------------------------------------------------------------------- [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 16:39 ` Денис Смирнов @ 2010-11-13 6:23 ` Alex Gorbachenko 2010-11-13 8:49 ` Денис Смирнов 2010-11-13 10:07 ` Ivan Fedorov 0 siblings, 2 replies; 13+ messages in thread From: Alex Gorbachenko @ 2010-11-13 6:23 UTC (permalink / raw) To: sisyphus [-- Attachment #1: Type: text/plain, Size: 1220 bytes --] On Fri, 12 Nov 2010 19:39:23 +0300 Денис wrote: >На этапе импортирования %chanelog в базу вытаскивать эти самые CVE. И >класть в отдельную табличку с полями -- CVE,package,version строго говоря, лучше три таблички. id(PK),package_name -< id(PK),)(package_id,package_version)UNIQUE) -< id(PK),((name_version_id, CVE)UNIQUE). индексы очевидны. join в данном случае дешёвый. >Если нам приходится часто выполнять какой-то сложный запрос -- его не >надо оптимизировать. Надо его ликвидировать, а предварительно >заготовленный результат держать в отдельной табличке. и это правильно, но tsearch2 всё равно придётся осилить для поиска по описаниям пакетов и тем же спискам изменений. осиливать там ровно 2 страницы текста. -- np: IRON MAIDEN - Satellite 15... The Final Frontier [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-13 6:23 ` Alex Gorbachenko @ 2010-11-13 8:49 ` Денис Смирнов 2010-11-13 10:07 ` Ivan Fedorov 1 sibling, 0 replies; 13+ messages in thread From: Денис Смирнов @ 2010-11-13 8:49 UTC (permalink / raw) To: ALT Linux Sisyphus discussions [-- Attachment #1: Type: text/plain, Size: 752 bytes --] On Sat, Nov 13, 2010 at 09:23:10AM +0300, Alex Gorbachenko wrote: AG> строго говоря, лучше три таблички. id(PK),package_name -< AG> id(PK),)(package_id,package_version)UNIQUE) -< id(PK),((name_version_id, AG> CVE)UNIQUE). индексы очевидны. AG> join в данном случае дешёвый. Если для package_name использовать hash-index'ы, то если я правильно понимаю -- этот вариант будет даже чуточку медленнее. AG> и это правильно, но tsearch2 всё равно придётся осилить для поиска по AG> описаниям пакетов и тем же спискам изменений. осиливать там ровно 2 AG> страницы текста. Это да. Кстати я пока так и не осилил :) -- С уважением, Денис http://mithraen.ru/ ---------------------------------------------------------------------------- [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-13 6:23 ` Alex Gorbachenko 2010-11-13 8:49 ` Денис Смирнов @ 2010-11-13 10:07 ` Ivan Fedorov 1 sibling, 0 replies; 13+ messages in thread From: Ivan Fedorov @ 2010-11-13 10:07 UTC (permalink / raw) To: sisyphus [-- Attachment #1: Type: text/plain, Size: 1197 bytes --] Alex Gorbachenko <agent_007-9UoSgsGcav8@public.gmane.org> writes: >>Если нам приходится часто выполнять какой-то сложный запрос -- его не >>надо оптимизировать. Надо его ликвидировать, а предварительно >>заготовленный результат держать в отдельной табличке. > > и это правильно, но tsearch2 всё равно придётся осилить для поиска по > описаниям пакетов и тем же спискам изменений. осиливать там ровно 2 > страницы текста. Ну это вы весьма погорячились, я не зря сказал, что Sphinx получается проще, правильная настройка tsearch2 - тот ещё гемор. Вдобавок если мы захотим добавить морфологию, то придётся делать весьма хитрое решение для эффективной поддержки морфологий более чем одного языка. [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 2:05 [sisyphus] postgresql index row Igor Zubkov 2010-11-12 7:47 ` Alexey I. Froloff @ 2010-11-12 9:58 ` Ivan Fedorov 2010-11-12 10:48 ` Денис Смирнов 2 siblings, 0 replies; 13+ messages in thread From: Ivan Fedorov @ 2010-11-12 9:58 UTC (permalink / raw) To: sisyphus [-- Attachment #1: Type: text/plain, Size: 1054 bytes --] Igor Zubkov <igor.zubkov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes: > Hi! > > Никто не сталкивался вот с таким? > > == AddIndexOnChangelogtext: migrating ======================================== > -- add_index(:changelogs, :changelogtext) Ну во первых и впрямь, "а нахрена?!". А во вторых оно всё равно не будет хорошо работать. Если вам нужен поиск по тексту - то надо пользоваться FTS движками. В PostgreSQL например встроен tsearch2. Из отдельных - Sphinx весьма неплох, да и настроить не имея опыта его проще чем tsearch2. А обычные btree индексы нормально искать по тексту всё равно не позволят. А если нужна проверка на уникальность, то там и индекса от какого-нить хэша хватит. [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] postgresql index row 2010-11-12 2:05 [sisyphus] postgresql index row Igor Zubkov 2010-11-12 7:47 ` Alexey I. Froloff 2010-11-12 9:58 ` Ivan Fedorov @ 2010-11-12 10:48 ` Денис Смирнов 2010-11-12 12:25 ` [sisyphus] [JT] " Ivan Fedorov 2 siblings, 1 reply; 13+ messages in thread From: Денис Смирнов @ 2010-11-12 10:48 UTC (permalink / raw) To: ALT Linux Sisyphus discussions [-- Attachment #1: Type: text/plain, Size: 473 bytes --] On Fri, Nov 12, 2010 at 04:05:03AM +0200, Igor Zubkov wrote: IZ> Никто не сталкивался вот с таким? А есть хоть какой-то смысл от _индекса_ по полю немеряного размера? Даже если бы это работало -- это было бы все равно ужасно. Опиши какую задачу ты хочешь решить этим странным действием, и тогда тебе подскажут как ее решить красиво. -- С уважением, Денис http://mithraen.ru/ ---------------------------------------------------------------------------- [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* [sisyphus] [JT] Re: postgresql index row 2010-11-12 10:48 ` Денис Смирнов @ 2010-11-12 12:25 ` Ivan Fedorov 2010-11-13 4:31 ` REAL 0 siblings, 1 reply; 13+ messages in thread From: Ivan Fedorov @ 2010-11-12 12:25 UTC (permalink / raw) To: sisyphus [-- Attachment #1: Type: text/plain, Size: 517 bytes --] "Денис Смирнов" <mithraen-EzvwY9xUkZCGiqJ2EaRE8Q@public.gmane.org> writes: > On Fri, Nov 12, 2010 at 04:05:03AM +0200, Igor Zubkov wrote: > > IZ> Никто не сталкивался вот с таким? > > А есть хоть какой-то смысл от _индекса_ по полю немеряного размера? Есть - его удалением можно круто ускорить работу базы, и взять за это немерянно бабла! :-D [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [sisyphus] [JT] Re: postgresql index row 2010-11-12 12:25 ` [sisyphus] [JT] " Ivan Fedorov @ 2010-11-13 4:31 ` REAL 0 siblings, 0 replies; 13+ messages in thread From: REAL @ 2010-11-13 4:31 UTC (permalink / raw) To: ALT Linux Sisyphus discussions 12.11.2010 18:25, Ivan Fedorov пишет: >> А есть хоть какой-то смысл от _индекса_ по полю немеряного размера? > > Есть - его удалением можно круто ускорить работу базы, и взять за это > немерянно бабла! :-D Такое в анналы просится :) -- REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2010-11-13 10:07 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-11-12 2:05 [sisyphus] postgresql index row Igor Zubkov 2010-11-12 7:47 ` Alexey I. Froloff 2010-11-12 16:06 ` Igor Zubkov 2010-11-12 16:25 ` Alexey I. Froloff 2010-11-12 16:44 ` Денис Смирнов 2010-11-12 16:39 ` Денис Смирнов 2010-11-13 6:23 ` Alex Gorbachenko 2010-11-13 8:49 ` Денис Смирнов 2010-11-13 10:07 ` Ivan Fedorov 2010-11-12 9:58 ` Ivan Fedorov 2010-11-12 10:48 ` Денис Смирнов 2010-11-12 12:25 ` [sisyphus] [JT] " Ivan Fedorov 2010-11-13 4:31 ` REAL
ALT Linux Sisyphus discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \ sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru public-inbox-index sisyphus Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.sisyphus AGPL code for this site: git clone https://public-inbox.org/public-inbox.git