powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с поиском по 40млн строк в один столбец.
25 сообщений из 79, страница 3 из 4
Помогите с поиском по 40млн строк в один столбец.
    #40092185
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А сорян. Все нормально. Нужна какая-то прагма.

Пишут что LIKE регистронезависимый, а индексы регистрозависимые, вот и не может использовать индекс без доп.настроек.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092196
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FTS5 индекс по 700 млн паролей у меня так и не построился. Уже 30 минут работает.
И сегмент данных - вырос до 50 Гб. Чуть позже я попробую детализировать.

Код: sql
1.
2.
3.
4.
5.
sqlite> CREATE VIRTUAL TABLE words2 USING fts5(word);
Run Time: real 0.120 user 0.002062 sys 0.000261
sqlite> 
sqlite> insert into words2 select * from words;
(waiting.....)



Возможно такой примитивный подход неприменим к текстовому поиску.
Нужно изучать опции FTS5 и понимать что он кладет в индекс. Слова? Биграммы? Триграммы?
Токенизирует и стеммингует английские слова?
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092200
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
FTS5 индекс по 700 млн паролей

Боюсь в данном случае FTS будет бесполезен, т.к. пароль это одно слово, а FTS ищет не подстроку, а слово внутри строки, т.е. слова должны быть разделены.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092204
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен. Если вернуться к кейсу автора.

Код: sql
1.
"SELECT column1 FROM table1 WHERE column1 LIKE '%$search_q%'"



Нам нужна такая структура которая толерантна к поиску подстрок. Триграммы - квадраграммы и так далее.

(я в топике не обсуждаю сейчас полезность этого кейса. Я думаю он может быть даже бесполезен.
Но это в некотором роде - челледж)


Вот здесь пишут про экспериментальную поддержку trigram https://www.sqlite.org/fts5.html

4.3.4. The Experimental Trigram Tokenizer

The experimental trigram tokenizer extends FTS5 to support substring matching in general, instead of the usual token matching. When using the trigram tokenizer, a query or phrase token may match any sequence of characters within a row, not just a complete token. For example:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE VIRTUAL TABLE tri USING fts5(a, tokenize="trigram");
INSERT INTO tri VALUES('abcdefghij KLMNOPQRST uvwxyz');

-- The following queries all match the single row in the table
SELECT * FROM tri('cdefg');
SELECT * FROM tri('cdefg AND pqr');
SELECT * FROM tri('"hij klm" NOT stuv');


Надо попробовать.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092230
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм...

Код: 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.
sqlite> CREATE VIRTUAL TABLE words_trigram USING fts5(word, tokenize="trigram");
Error: no such tokenizer: trigram
sqlite> 
sqlite> 
sqlite> .dbconfig
          defensive off
            dqs_ddl on
            dqs_dml on
        enable_fkey off
        enable_qpsg off
     enable_trigger on
        enable_view on
     fts3_tokenizer on
 legacy_alter_table off
 legacy_file_format off
     load_extension on
   no_ckpt_on_close off
     reset_database off
        trigger_eqp off
     trusted_schema on
    writable_schema off
sqlite> 
sqlite> .version
SQLite 3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837balt1
zlib version 1.2.11
gcc-9.3.0
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092272
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: sql
1.
2.
sqlite> CREATE VIRTUAL TABLE words_trigram USING fts5(word, tokenize="trigram");
Error: no such tokenizer: trigram


Похоже недавно добавили, качни свежий , в нем работает
Код: sql
1.
2.
3.
4.
sqlite> .version
SQLite 3.36.0 2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5
zlib version 1.2.11
gcc-5.2.0
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092291
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я уже понял что у меня бомж-версия. Щас я смотрю этот-же класс индекса в Postgresql. Там - какая-то фигня
с установкой extensions.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092329
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил новую версию SQLite. Еще строит вторую таблицу. Минут 30.

Вообще складывается впечатление что триграм-индекс еще более прожорливый чем BTree.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
mayton@ryzen-ssd:/sqlite3/3.3.6$ ./sqlite3 /db/sqlite3/mayton.db
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
sqlite> create table words(word text);
sqlite> .import /bigdata/billion/1.2billion.filtered.csv words
sqlite> 
sqlite> CREATE VIRTUAL TABLE words_trigram USING fts5(word, tokenize="trigram");
sqlite> 
sqlite> insert into words_trigram select * from words;
(waiting)


Еще работает.

Статистику по сегментам я еще не смотрел. Но внешне оригинальный источник данных (csv) был 8Гб.

А текущий размер базы - уже 27Г.

И эта виртуальная таблица - интересная штука. Это как-бы функция имеющая интерфейс таблицы которая
имеет свой набор сегментов данных. И запросы к ней выглядят не как запросы а как вызовы функций.

Я думаю что эти VT - это сильная сторона SQLite. Позволяют пользователям создавать свои собственные
специфичные структуры данных.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092345
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge
Я так понимаю, что сортировка по умолчанию - это сортировка по первичному ключу.
И вы неправильно понимаете.
У всякого запроса есть план доступа и задача СУБД - оптимизация этого плана.
Если оптимальный план предусматривает доступ по индексу (у первичного ключа индекс обязательно будет) - будет доступ по индексу.
Если оптимальный план предусматривает извлечение данных со страниц базы в их физическом порядке - будет совсем по другому.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092356
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge
Я так понимаю, что сортировка по умолчанию - это...


В SQL НЕТ никакой "сортировки по умолчанию".

Если нет ORDER BY порядок возвращаемых данных не гарантируется. Сейчас может так, через пару лет (в новой версии) по другому.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092365
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
ShSerge
Я так понимаю, что сортировка по умолчанию - это сортировка по первичному ключу.
И вы неправильно понимаете.
У всякого запроса есть план доступа и задача СУБД - оптимизация этого плана.
Если оптимальный план предусматривает доступ по индексу (у первичного ключа индекс обязательно будет) - будет доступ по индексу.
Если оптимальный план предусматривает извлечение данных со страниц базы в их физическом порядке - будет совсем по другому.

Правильно и неправильно. Давай не будем уходить от обсуждения конкретного запроса с которого все началось
mayton
Код: php
1.
$res = $db->query("SELECT * FROM table1 LIMIT 1");


Повторюсь: с точки зрения теории РСУБД написан неправильный запрос. Если очень надо - давай перечитаем Кодда, он разъясняет что в теории РСУБД нет порядка следования записей, т.е. без ORDER BY данный запрос неоднозначен. UB как сказали бы сишники. По-хорошему такой запрос должен вызывать ошибку, но т.к. такое никто не пишет, на генерацию ошибок не заморачиваются.
mayton обосновал смысл этого запроса 22362030 , полностью согласен с ним что для оценки времени отклика такой запрос идеально подходит.

Но в реальности есть какое-то физическое хранение, как следствие есть какая-то первая запись, которая стабильно выбирается первой при запросе
Код: sql
1.
SELECT * FROM table1


Как заметил ShSerge это будет запись с наименьшим primary key. Но нет гарантий что всегда будет так. Например в MSSQL автоматом для primary key создается кластерный индекс, т.е. как такового индекса нет, а записи физически упорядочиваются в порядке возрастания ключа, но никто не запрещает отменить кластерный индекс для primary key и сделать его по другому полю, просто оно так надо в 99.99% случаев.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092394
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если я правильно помню, в SqlLite с Primary Key все не так просто. Там еще внутренний ключ есть.
2. Но даже в этом случае, без order by порядок опять таки будет зависит от кучи случайностей и самого запроса. Group By, Distinct и 100500 других ключевых слов на любые Primary Key'и и порядки положат наноболт.
3. Ошибки не обязаны выявлять ошибки логики. А рапортуют только о синтаксических ошибках. Limit без Order, это просто указание остановится после 1-ой найденной записи. За смыслом и логикой должен смотреть программист. Возможно, программист хотел этим запросом не данные получить, а просто проверить наличие хоть одной строки в таблице... кто же его знает... Но разумеется, если Вы пользуетесь запросами которые возвращают "первое попавшиеся" ( C ), то сами себе злобные буратино.
В общем-то, в Limit (для пагинации) без Order особой беды и нет. Т.к. система (в основном) детерминирована и в большинстве (не всегда) случаев повторные вызовы одинакового запроса выдадут те же данные.
В основном и не всегда - т.к. в случае "серьезных баз" и параллельного выполнения запросов, порядок будет зависит от множества случайных (временных) факторов и даже два последовательных вызова могут дать данные в совершенно разном порядке afaik.

IMHO
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092399
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Если очень надо - давай перечитаем Кодда, он разъясняет что в теории РСУБД нет порядка следования записей, т.е. без ORDER BY данный запрос неоднозначен.
Можно перечитывать хоть Кодда, хоть священные тексты, но ваша софистика не станет более убедительной.
Реляционная алгебра определяет некоторый набор правил и вообще никак не касается семантики кортежей строк данных.
Семантика (целиком и полностью) определяется автором конкретного приложения. Будь то РСУБД, которая реализует реляционную алгебру или приложение, которое манипулирует данными, доступ к которым обеспечивает эта самая РСУБД.UB как сказали бы сишники."Когда в руках молоток, то всё вокруг видится гвоздями". Что-то не замечал я, чтобы комитет исключал из стандарта все случаи UB, а разработчики компиляторов выдавали бы ошибки для кода с неопределённым поведением.
Как-то наоборот - эти мерзкие и отвратительные люди используют UB для всяческих оптимизаций. И далеко не всегда эти оптимизации совпадают с ожиданиями скромного прикладного программиста.По-хорошему такой запрос должен вызывать ошибкуА давайте вы не будете обобщать необобщаемое? А то дай вам волю и в борьбе за мир во всём мире вы не оставите камня на камне.
Если мне требуется десять произвольных записей, а для обеспечения "вашего детерминизма" придётся отсортировать миллиардную таблицу - "Я буду крайне разочарована. Крайне." (произносится голосом Аллы Демидовой).Как заметил ShSergeПочитайте, уже, хоть что-нибудь о методах доступа к данным.
Начать можете всё с той же реляционной алгебры г-на Кодда, которая чётко и однозначно формулирует единственное назначение первичного ключа: однозначная идентификация каждой строки кортежа (данных).
В этом определении нет ни одного слова об упорядоченности - только о сравнение на (не)равенство.
И хотя эффективная реализация первичных и предполагает использование того или иного варианта "монотонных счётчиков" это - именно что деталь реализации. Опираться на которую, вообще-то, нельзя. Точно так же, как нельзя опираться на устойчивость порядка следования строк кортежа.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092401
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

...И хотя эффективная реализация первичных и предполагает использование того или иного варианта "монотонных счётчиков" это...

AFAIK в многопроцессорных/кластерных системах "монотонный счетчик" одна из главных проблем, а не как не эффективная реализация. Был очень сильно удивлен, когда увидел реализацию pk на случайных числах. Почитал в I-net'е, был удивлен еще сильнее, т.к. это бест практис для мейнфреймов.
Ну и AFAIK в кластерах/rac'ах основные коллизии и проблемы как раз из-за монотонных ключей/индексов.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092414
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Basil A. Sidorov

...И хотя эффективная реализация первичных и предполагает использование того или иного варианта "монотонных счётчиков" это...

AFAIK в многопроцессорных/кластерных системах "монотонный счетчик" одна из главных проблем, а не как не эффективная реализация. Был очень сильно удивлен, когда увидел реализацию pk на случайных числах. Почитал в I-net'е, был удивлен еще сильнее, т.к. это бест практис для мейнфреймов.
Ну и AFAIK в кластерах/rac'ах основные коллизии и проблемы как раз из-за монотонных ключей/индексов.

Возможно имеется в виду UUID.

Но для него существует несколько схем кодирования. Есть такие которые включают МАК-адрес сетевого интерфейса (48 бит)
и текущий timestamp. С разной точностью и знаковостью. И еще остается пространство для добавления шумовой
случайной информации. Такая схема кодирования достаточна что-б хотя-бы на практическом уровне закрыть вопрос
коллизий.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092417
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

А я открою контору, которая каждому гуиду будет выдавать сертификат уникальности.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что торговля цифровыми подписями, гарантиями и круговым поручительством - это
бизнес будущего. И без централизации.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092435
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я думаю что торговля цифровыми подписями, гарантиями и круговым поручительством - это
бизнес будущего. И без централизации.

Про это тут оффтоп, но отдельной темой можно обсудить. ИМХО тут все очень противоречиво.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092462
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

...Возможно имеется в виду UUID...

Нет. Тупо рандом. Используется в Oracle Utilitites CC&B
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092472
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
AFAIK в многопроцессорных/кластерных системах "монотонный счетчик" одна из главных проблем
Проблема не монотонный счётчик как таковой, а странное желание не иметь "дырок" в значениях первичных ключей. Или не менее странное желание гарантировать монотонность этих значений "в порядке вставки".
А так - выдали каждому потоку "достаточно большой" диапазон и резко сократили конкуренцию за общий счётчик.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092473
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И без централизации.
И вот на этом моменте оно не будет работать. Вааще.
Как вы конфликты-то собрались разрешать? И не конфликты протокола, а вполне материальные тяжбы?
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092493
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
mayton
И без централизации.
И вот на этом моменте оно не будет работать. Вааще.
Как вы конфликты-то собрались разрешать? И не конфликты протокола, а вполне материальные тяжбы?

Несколько лет назад некто Филипп Циммерман создавал концепцию такого протокола. Я читал
об этом где - то в конце 90х. Я тогда учился в универе. И меня очень впечатлило.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092570
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да протоколами-то всё в порядке.
В реальной жизни вы как собрались конфликты решать?
С чем, грубо говоря, в суд пойдёте? С хэшами и мнениями приглашённых экспертов? Правда?
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092611
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве мы ходим в суд если прилетает дырявое обновление от Microsoft или Google?

Ходить в суды - это вообще не моя ветка обсуждений. Я просто акцентировал на том что свободные
сообщества экспертов могли-бы давать свою оценку качества исходного кода для тех продуктов
которыми мы пользуемся каждый день. Остался пустяк - дать нам механизм этой оценки.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40092629
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А разве мы ходим в суд если прилетает дырявое обновление от Microsoft или Google?
А у вас заключён миллионный контракт с MS и Google?
А вот когда речь про деньги - очень даже ходят. Хоть канал Царьград против Googel, хоть MS против Amazon (или наоборот).

P.S.
Странный инфантилизм: "Я тут фигню про деньги делаю, но как этим пользоваться в реальной жизни - мне вообще пофигу".
Сообщества, блин ...
Сунули тут недавно сообщество CentOS в анус и где оно теперь, это сообщество?
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 3 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с поиском по 40млн строк в один столбец.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]