* [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 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] 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: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: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] [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
* 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
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