|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Приветствую, уважаемые. Имеется тхт. файл с около 40кк строк. Строки из 20-30 латинских знаков без пробелов. Хочу сделать поиск по наличию строки. Простым запросом. Сейчас текстовый файл переведен в базу sqlite. не принципиальго но посчитал простым решением. Совсем пионер в теме. Прошу помощи и совета. Вот форма поиска: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Вот скрипт поиска: Код: php 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.
Заранее весьма благодарен за помощь и рекомендации. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2021, 21:57 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
bonnie Хочу сделать поиск по наличию строки. Простым запросом. ... Код: php 1.
Это поиск подстроки. Поиск строки так Код: sql 1.
В таком виде можно ускорить индексом по column1 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 08:50 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
спасибо, тоже искал решение на эту задачку ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 15:18 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
А зачем в SQLite-то? Можно прямо в тексте каким-нибудь grep. Он и под Линукс и под Виндовс имеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 07:53 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ShSerge А зачем в SQLite-то? Можно прямо в тексте каким-нибудь grep. Он и под Линукс и под Виндовс имеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 10:58 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
kealon(Ruslan) ShSerge А зачем в SQLite-то? Можно прямо в тексте каким-нибудь grep. Он и под Линукс и под Виндовс имеется. Какой индекс? Кто и когда индексировать и реиндексировать будет? Я думаю, что греп на таком размере (явно преувеличенном) и так быстро сработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:13 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ShSerge kealon(Ruslan) пропущено... только если индекс задействовать Какой индекс? Кто и когда индексировать и реиндексировать будет? Я думаю, что греп на таком размере (явно преувеличенном) и так быстро сработает. Если задача одноразовая - то можно и грепом грепнуть. Если надо искать в данных на регулярной основе - то лучше залить в любую бесплатную базячку или nosql систему какая есть под рукой. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:28 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton, 40000000*30=ниачем. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:09 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
П.С. Это 40 миллионов (байтов) умножить на тридцать. Это не гигабайты какие-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:15 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Теперь представим себе БД. Во-первых, заливка, во-вторых индексация. Без индексации - тот же scan, что и грепом. Ну и? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:33 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
40 млн строк каждая по 30 символов. Это 1 200 000 000 символов. Ну не знаю. 1.2 Гига почти. Ну не знаю не знаю. Был у нас топик несколько лет назад. С унификацией. Там как раз тестовые данные у нас были в 1.2 billion. Я даже название файла запомнил. Вобщем линейный поиск (а так работает греп) будет в среднем как время поиска по половине этой коллекции. Даже если это все в оперативке - лежит все равно надо подождать. Ништяк говоришь? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:51 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Да, ништяк. Просто потому, что спроектировать и создать базу, загрузить в неё сорок миллионов строк, построить индексы и запросы ... Да за это время эту базу можно будет про-grep-ать раз цать. А то и сот. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:55 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, так явно же ему ни раз надо будет поиск делать, иначе бы прогрепал и всё, а не на форуме вопрос задавал ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:58 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Тогда вариант Димы - самый быстрый. Загрузить в sqlite. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:11 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton Тогда вариант Димы - самый быстрый. Загрузить в sqlite. А если не один раз, то что, опять загружать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:03 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ShSerge mayton Тогда вариант Димы - самый быстрый. Загрузить в sqlite. А если не один раз, то что, опять загружать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:18 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
kealon(Ruslan) ShSerge пропущено... А если не один раз, то что, опять загружать? Возможно он прав. sqlite - это всё таки не PG и не оракл. Ему недостаточно сделать fopen(...) сегмента данных. Ему надо реально прогрузить всю ботву в memory. Вы хоть раз заглядывали в sqlite-дамп? Это-же не блочный сегмент данных. Это чортов CSV. Хотя... я смотрел туда лет 5 назад. Как щас не знаю. Но вряд-ли что-то сильно изменилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:39 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton kealon(Ruslan) пропущено... зачем опять загружать? загрузил и пользуйся Возможно он прав. sqlite - это всё таки не PG и не оракл. Ему недостаточно сделать fopen(...) сегмента данных. Ему надо реально прогрузить всю ботву в memory. В sqlite те же принципы что во взрослых СУБД: данные страницами хранятся, нужные страницы закачиваются в кэш и т.д. и т.п. Так что однократно залить, проиндексировать и при поиске по индексу будут читаться только нужные страницы. Залить в sqlite ТС сам решил. Зачем? Может ему так лучше, боюсь ответа мы не узнаем, он тут больше не появлялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:49 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Dima T mayton пропущено... Возможно он прав. sqlite - это всё таки не PG и не оракл. Ему недостаточно сделать fopen(...) сегмента данных. Ему надо реально прогрузить всю ботву в memory. В sqlite те же принципы что во взрослых СУБД: данные страницами хранятся, нужные страницы закачиваются в кэш и т.д. и т.п. Так что однократно залить, проиндексировать и при поиске по индексу будут читаться только нужные страницы. Залить в sqlite ТС сам решил. Зачем? Может ему так лучше, боюсь ответа мы не узнаем, он тут больше не появлялся. Он же не в хибернейт свой сервак опускает? Ему нужен shutdown периодически. И после рестарта - поднятие БД (быстрое в том же виде как и было). Не импорт а именно монтирование дата-файлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:52 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton Он же не в хибернейт свой сервак опускает? Ему нужен shutdown периодически. И после рестарта - поднятие БД (быстрое в том же виде как и было). Не импорт а именно монтирование дата-файлов. Он готовый файл с БД использует, это по коду видно bonnie Вот скрипт поиска: Код: php 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:57 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Насколько я помню, в SQLite очень долго происходят операции изменения данных. Чтение, да, быстрое. Несколько убыстрить его получится грамотным управлением транзакций. Но нафига это все, если за несколько миллисекунд можно регулярным выражением в грепе, или ещё в чем-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:59 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Хорошо. А сколько секунд или милисекунд у него занимает эта операция? Код: php 1. 2.
Тоесть я хочу понять метрику "готовность системы выдать 1-й байт выборки" (Time to first byte (TTFB)) для двигателя sqlite в соотношении к Postgresql к примеру. Разумеется я буду жесток и буду требовать время холодного старта тоже включить в это измерение. Мне это интересно потому что это тоже юзейс данного топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 16:03 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
По моему опыту, на однострочных INSERT/SELECT SQLLite примерно в 7-10 раз быстрее PostgreSQL Просто потому, что не нужно общение через TCP/IP. Время "холодного cтарта" сервиса PostreSQL или Oracle Entrprise Edition, тем более и рядом с SQLLite не стояло ))) p.s. железо - бесплатный и medium (4 Gb ram) инстанс Amazon EC2 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 16:17 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ShSerge ...Насколько я помню, в SQLite очень долго происходят операции изменения данных... Я помню совершенно обратное. Мне нужно было создать простейшую базу из 3-4-х полей, где-то под 50 лямов строк, но были частые INSERT/SELECT'ы отдельных позиций. Переход с PostgreSQL на SQLLite ускорил минимум раз в 7-10, а то и больше. Приложение однопоток, парсер сайта с расписаниями авиа-перелетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 16:20 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Я вечерком проведу эксперимент на 1 лярде строк. По холодному старту. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 16:42 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Э-э-э ... Есть какие-то сомнения, что на "холодном старте" grep обскачет sqlite? Или будет сравнение удавки с бечевой (sqlite vs PG vs MariaDB vs Kafka vs ...)? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 16:51 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Я разве говорил про постгрес? Дело в том, что в SQLite, по умолчанию каждый инсерт проходит в отдельной транзакции. Т.е., проверяется целостность и все такое, а так же расширение базы, по мере надобности.. Причем, это каждый раз. При каждом инсерте. Это, ясен пень, можно побороть. Но поиск все равно происходит сканом. Если не проиндексировано имхо. А индексация - это сортировка и хеширование, что тоже время занимает. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:06 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Мне греп не интересен. Просто хочу узнать обстановку с современным sqlite. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:12 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Поиск в базе с индексами (не по like, а по =) - что при "холодном" старте, что при "горячем", все равно быстрее, чем в текстовом файле А индексация - это сортировка и хеширование, что тоже время занимает Так один раз. Создали базу. Залили данные. Пользуемся В контексте дискуссии, уже не очень понятен термин "холодный старт". Так можно договориться, что это время от начала форматирования винчестера, до показа страницы, включая время вбивания 40 млн. строк с клавиатуры. В 98% случаев при HTTP никакого холодного старта не будет, стандартный CGI уже с 1995 года не модно AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:19 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton Мне греп не интересен. Просто хочу узнать обстановку с современным sqlite. Я не уверен, что он радикально изменился с тех пор, когда про него Чингиз написал. Но у меня имеются (уже завершенных) несколько вэб-проектов на нем. Офигенно нравится. Для вэба - самое то. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:21 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton Мне греп не интересен. Просто хочу узнать обстановку с современным sqlite. С современным не знаю. Лет 5 назад - работало. И быстро работало (на моем паттерне insert'ов, select'ов минимум в 7-10 раз быстрее PostgreSQL, все запросы однострочные, экономия времени на коммуникации между приложением и ядром базы /один процесс/) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:22 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Поиск в базе с индексами (не по like, а по =) - что при "холодном" старте, что при "горячем", все равно быстрее, чем в текстовом файле В первом исходнике у автора видна наивная попытка делать поиск по вхождению строки Код: sql 1.
Если он не послушается Диминого совета и все-таки оставит like (захочет искать Код: sql 1.
), то ему тогда более универсальным решением будет вот такой подход как здесь https://www.sqlite.org/fts5.html Коробочный текстовый поиск. Запрос надо будет подпилить зато явное преимущество индекса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:31 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
А, вспомнил. Пять лет назад лайк по русским буквам не работал. Исправили? Я читал инструкцию, как его перекомпилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:35 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ShSerge А, вспомнил. Пять лет назад лайк по русским буквам не работал. Исправили? Я читал инструкцию, как его перекомпилить. Не верю ( C ) Upper, lower - могут работать/не работать. Но как может не работать Like? Если 8-битная кодировка, откуда он знает (какая ему разница), русские буквы или нет? У Вас проблемы и решения какие-то странные. То дефолтный autocommit не отключили, то инструкцию прочитать надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 17:43 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Чтож вы так зло. Автокоммит? Интересно. И что, автор его отключил? А насчёт русских букв - известная история, можете погуглить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 18:01 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Ну да с ловер и уппер проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 18:03 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
У них (sqlite) странный багтрекер https://www.sqlite.org/src/wiki?name=Bug Reports Ничего толком найти нельзя. Пробовал по слову russian искать - ничего нет. Или инцедентов не было или они просто отдали эту часть функционала куда-то третьим конторам. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 18:16 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton, Проще проверить. Щас докурю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 18:25 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Проверил. Код: sql 1. 2. 3.
Это было - "Рога и копыта". Так не работает, а если написать Рога, то работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 18:52 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton Хорошо. А сколько секунд или милисекунд у него занимает эта операция? Код: php 1. 2.
Тоесть я хочу понять метрику "готовность системы выдать 1-й байт выборки" (Time to first byte (TTFB)) для двигателя sqlite в соотношении к Postgresql к примеру. Разумеется я буду жесток и буду требовать время холодного старта тоже включить в это измерение. Мне это интересно потому что это тоже юзейс данного топика. Какой-то неадекватный запрос. По-хорошему должна быть ошибка синтаксиса т.к. нет ORDER BY Сразу скажу что sqlite как СУБД для сайта это очень плохая идея, он не для этого создан. С полноценной СУБД нет смысла сравнивать. Тут топик ушел непонятно в какую сторону, ТС пропал, поэтому немножко добавлю условий как я понял первый пост: есть некий текстовый файл в котором надо найти нужные записи. ТС решил залить его в таблицу БД, надеясь что будет работать быстрее. Я предположил что файл только для чтения, например какой-то большой справочник, который редко обновляется. Т.е. задача не требует функционала полноценной СУБД. Как уже написал sqlite для другого, он может разделять кэш между потоками одного процесса, но насколько знаю скрипты PHP запускается разными процессами, поэтому вся прогретость будет сводиться к тому что нужные страницы окажутся в дисковом кэше, т.е. тут никакой разницы с чтением напрямую из файла. Если запрос приводит к скану таблицы (... like '%...') то не будет никакого выигрыша по сравнению с чтением файла. НО если возможно задействовать индекс, то ускорение будет за счет чтения только нужных страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 20:28 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Dima T Какой-то неадекватный запрос. По-хорошему должна быть ошибка синтаксиса т.к. нет ORDER BY ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 21:34 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Dima T Какой-то неадекватный запрос. По-хорошему должна быть ошибка синтаксиса т.к. нет ORDER BY Я не сказал что должен, я сказал "По-хорошему должна быть ошибка". Теория РСУБД гласит что все записи равноправны и не имеют порядка, поэтому требование получить первую бессмысленно без указания порядка сортировки, это требование дать одну любую из имеющихся, что полезно разве что для написания ПГСЧ. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 21:43 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Dima T поэтому требование получить первую бессмысленно без указания порядка сортировки, это требование дать одну любую из имеющихся, что полезно разве что для написания ПГСЧ. Синтаксис, на самом деле, не определяет семантику. Более того - не имеет права её определять. Это правила грамматики, но только от автора зависит будет ли иметь смысл грамматически корректное приложение. Это мы ещё даже не погружаемся в пучины какой-нибудь гносеологии и не начали ломать копья о смысле термина "бессмысленный" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 04:43 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Я так понимаю, что сортировка по умолчанию - это сортировка по первичному ключу. А так да, дима_т вобщем правильно говорит. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 06:38 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Dima T mayton Хорошо. А сколько секунд или милисекунд у него занимает эта операция? Код: php 1. 2.
Тоесть я хочу понять метрику "готовность системы выдать 1-й байт выборки" (Time to first byte (TTFB)) для двигателя sqlite в соотношении к Postgresql к примеру. Разумеется я буду жесток и буду требовать время холодного старта тоже включить в это измерение. Мне это интересно потому что это тоже юзейс данного топика. Какой-то неадекватный запрос. По-хорошему должна быть ошибка синтаксиса т.к. нет ORDER BY Тут - разные аспекты. Есть реляционная алгебра. И есть конкретная реализация SQL. Сам по себе SQL и современные DBMS к примеру вобщем-то не требуют существования PK. Многие создают лог-таблицы без PK но с сегментацией по времени. По дням или неделям или месяцам. Такой подход базируется на предположении что лог нужен но на всякий пожарный случай. И доступ к нему будет редкий. Можно и сортирнуть если что за последний день. Есть процессы ETL которые тоже не соблюдают ордеринг строк или полагаются на дефолтный который по случайному стечению обстоятельств (IOT/ClusteredTable) может быть сортированным относительно ключа если таковой был объявлен. Это тоже лежит вне реляционной алгебры. Есть процессы сбора статистики по БД. Которые используют семплирование. Буквально - это выборка рандомных 3-5% (или любых других процентов) от общего объема таблицы. Где или откуда эти проценты выбираются - это ноу-хау каждой системы. Оракл ЕМНИП выбирает набор DB_BLOCKS и уже из них берет семплирование. Это - тоже физика и без нее БД просто не может жить. Есть технически хинты или хитрости которые использует разработчик. Например чтобы проверить что таблица не пуста, junior SQL develper считает count(*) по всей таблице. А опытный делает тот-же count(*) с limit. Хотя для реляционной алгебры - безразлично но для физической модели очень даже важно. В данном конкретном примере меня интересовало время чистого холодного старта БД sqlite и выборка любой первой попавшейся строки из таблицы. Я пытался сравнить sqlite с h2/hsql/derby в их способе хранения журнала и сегмента данных. Некоторые из них поджимают журнал. Некоторые делают это отложенной операцией. Впрочем я могу это тоже проверить вместе с sqlite. И если sqlite ленив и не поджимает журнал то я буду вынужден ждать первой строки до тех пор пока вся история изменений таблицы не будет применена. Ведь история может содержать и deletes/updates. IMHO. Именно поэтому я написал запрос таким образом. Если-бы я добавил order by то для миллиардной неиндексированной таблицы это заняло-бы длинельное время и моя оценка была бы сложной. Мне пришлось-бы учитывать неизвестное время сортировки. А так я получил чистое время прогрева всего стека. UI-щики которые рисуют приложения в браузере обычно меряют TTFB для endpoints. Чтобы оценить как быстро можно начать рендеринг пользовательского интерфейса исходя из свойств back-end. И если TTFB плохой то бесполезно что-то оптимизировать в графической части. Надо лечить back. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 09:30 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton В данном конкретном примере меня интересовало время чистого холодного старта БД sqlite и выборка любой первой попавшейся строки из таблицы. Я пытался сравнить sqlite с h2/hsql/derby в их способе хранения журнала и сегмента данных. Некоторые из них поджимают журнал. Некоторые делают это отложенной операцией. Впрочем я могу это тоже проверить вместе с sqlite. И если sqlite ленив и не поджимает журнал то я буду вынужден ждать первой строки до тех пор пока вся история изменений таблицы не будет применена. Ведь история может содержать и deletes/updates. IMHO. С журналом все просто, его обычно нет если нет открытых транзакций на запись: https://habr.com/ru/post/149635/По умолчанию журнал ведется в режиме DELETE . Это означает, что файл журнала удаляется после завершения транзакции. Сам факт наличия файла с журналом в этом режиме означает для SQLite, что транзакция не была завершена, база нуждается в восстановлении. Файл журнала имеет имя файла БД, к которому добавлено "-journal". Как уже писал: подозреваю что данная БД используется только для чтения, если так, то затраты минимальны - проверить наличие файла с журналом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 09:49 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Я потестил с помощью штатной утилиты sqlite3.exe - открытие файла БД происходит не сразу, а только когда требуется обращение к БД, т.е. в момент передачи запроса. В таком случае в режиме только чтение можно вообще отключить использование журнала перед подачей запроса Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 10:14 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ХМ... а что тут like не летает? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 10:25 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
А сорян. Все нормально. Нужна какая-то прагма. Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 10:43 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
bonnie Имеется тхт. файл с около 40кк строк. Строки из 20-30 латинских знаков без пробелов. Хочу сделать поиск по наличию строки. Простым запросом. Сейчас текстовый файл переведен в базу sqlite. не принципиальго но посчитал простым решением. Самое простое решение - использовать Pos() для строк файла. Быстрее будет нечто похожее для буфера чтения, без предварительного выделения строк, но это сложнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 11:30 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton А сорян. Все нормально. Нужна какая-то прагма. Пишут что LIKE регистронезависимый, а индексы регистрозависимые, вот и не может использовать индекс без доп.настроек. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 11:47 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
FTS5 индекс по 700 млн паролей у меня так и не построился. Уже 30 минут работает. И сегмент данных - вырос до 50 Гб. Чуть позже я попробую детализировать. Код: sql 1. 2. 3. 4. 5.
Возможно такой примитивный подход неприменим к текстовому поиску. Нужно изучать опции FTS5 и понимать что он кладет в индекс. Слова? Биграммы? Триграммы? Токенизирует и стеммингует английские слова? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 12:28 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton FTS5 индекс по 700 млн паролей Боюсь в данном случае FTS будет бесполезен, т.к. пароль это одно слово, а FTS ищет не подстроку, а слово внутри строки, т.е. слова должны быть разделены. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 12:41 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Согласен. Если вернуться к кейсу автора. Код: sql 1.
Нам нужна такая структура которая толерантна к поиску подстрок. Триграммы - квадраграммы и так далее. (я в топике не обсуждаю сейчас полезность этого кейса. Я думаю он может быть даже бесполезен. Но это в некотором роде - челледж) Вот здесь пишут про экспериментальную поддержку 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.
Надо попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 12:46 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Хм... Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 13:29 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton Код: sql 1. 2.
Похоже недавно добавили, качни свежий , в нем работает Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 15:34 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Да я уже понял что у меня бомж-версия. Щас я смотрю этот-же класс индекса в Postgresql. Там - какая-то фигня с установкой extensions. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 16:07 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Поставил новую версию SQLite. Еще строит вторую таблицу. Минут 30. Вообще складывается впечатление что триграм-индекс еще более прожорливый чем BTree. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Еще работает. Статистику по сегментам я еще не смотрел. Но внешне оригинальный источник данных (csv) был 8Гб. А текущий размер базы - уже 27Г. И эта виртуальная таблица - интересная штука. Это как-бы функция имеющая интерфейс таблицы которая имеет свой набор сегментов данных. И запросы к ней выглядят не как запросы а как вызовы функций. Я думаю что эти VT - это сильная сторона SQLite. Позволяют пользователям создавать свои собственные специфичные структуры данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 17:58 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ShSerge Я так понимаю, что сортировка по умолчанию - это сортировка по первичному ключу. У всякого запроса есть план доступа и задача СУБД - оптимизация этого плана. Если оптимальный план предусматривает доступ по индексу (у первичного ключа индекс обязательно будет) - будет доступ по индексу. Если оптимальный план предусматривает извлечение данных со страниц базы в их физическом порядке - будет совсем по другому. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 18:48 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
ShSerge Я так понимаю, что сортировка по умолчанию - это... В SQL НЕТ никакой "сортировки по умолчанию". Если нет ORDER BY порядок возвращаемых данных не гарантируется. Сейчас может так, через пару лет (в новой версии) по другому. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 19:53 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov ShSerge Я так понимаю, что сортировка по умолчанию - это сортировка по первичному ключу. У всякого запроса есть план доступа и задача СУБД - оптимизация этого плана. Если оптимальный план предусматривает доступ по индексу (у первичного ключа индекс обязательно будет) - будет доступ по индексу. Если оптимальный план предусматривает извлечение данных со страниц базы в их физическом порядке - будет совсем по другому. Правильно и неправильно. Давай не будем уходить от обсуждения конкретного запроса с которого все началось mayton Код: php 1.
Повторюсь: с точки зрения теории РСУБД написан неправильный запрос. Если очень надо - давай перечитаем Кодда, он разъясняет что в теории РСУБД нет порядка следования записей, т.е. без ORDER BY данный запрос неоднозначен. UB как сказали бы сишники. По-хорошему такой запрос должен вызывать ошибку, но т.к. такое никто не пишет, на генерацию ошибок не заморачиваются. mayton обосновал смысл этого запроса 22362030 , полностью согласен с ним что для оценки времени отклика такой запрос идеально подходит. Но в реальности есть какое-то физическое хранение, как следствие есть какая-то первая запись, которая стабильно выбирается первой при запросе Код: sql 1.
Как заметил ShSerge это будет запись с наименьшим primary key. Но нет гарантий что всегда будет так. Например в MSSQL автоматом для primary key создается кластерный индекс, т.е. как такового индекса нет, а записи физически упорядочиваются в порядке возрастания ключа, но никто не запрещает отменить кластерный индекс для primary key и сделать его по другому полю, просто оно так надо в 99.99% случаев. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 20:50 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
1. Если я правильно помню, в SqlLite с Primary Key все не так просто. Там еще внутренний ключ есть. 2. Но даже в этом случае, без order by порядок опять таки будет зависит от кучи случайностей и самого запроса. Group By, Distinct и 100500 других ключевых слов на любые Primary Key'и и порядки положат наноболт. 3. Ошибки не обязаны выявлять ошибки логики. А рапортуют только о синтаксических ошибках. Limit без Order, это просто указание остановится после 1-ой найденной записи. За смыслом и логикой должен смотреть программист. Возможно, программист хотел этим запросом не данные получить, а просто проверить наличие хоть одной строки в таблице... кто же его знает... Но разумеется, если Вы пользуетесь запросами которые возвращают "первое попавшиеся" ( C ), то сами себе злобные буратино. В общем-то, в Limit (для пагинации) без Order особой беды и нет. Т.к. система (в основном) детерминирована и в большинстве (не всегда) случаев повторные вызовы одинакового запроса выдадут те же данные. В основном и не всегда - т.к. в случае "серьезных баз" и параллельного выполнения запросов, порядок будет зависит от множества случайных (временных) факторов и даже два последовательных вызова могут дать данные в совершенно разном порядке afaik. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 09:13 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Dima T Если очень надо - давай перечитаем Кодда, он разъясняет что в теории РСУБД нет порядка следования записей, т.е. без ORDER BY данный запрос неоднозначен. Реляционная алгебра определяет некоторый набор правил и вообще никак не касается семантики кортежей строк данных. Семантика (целиком и полностью) определяется автором конкретного приложения. Будь то РСУБД, которая реализует реляционную алгебру или приложение, которое манипулирует данными, доступ к которым обеспечивает эта самая РСУБД.UB как сказали бы сишники."Когда в руках молоток, то всё вокруг видится гвоздями". Что-то не замечал я, чтобы комитет исключал из стандарта все случаи UB, а разработчики компиляторов выдавали бы ошибки для кода с неопределённым поведением. Как-то наоборот - эти мерзкие и отвратительные люди используют UB для всяческих оптимизаций. И далеко не всегда эти оптимизации совпадают с ожиданиями скромного прикладного программиста.По-хорошему такой запрос должен вызывать ошибкуА давайте вы не будете обобщать необобщаемое? А то дай вам волю и в борьбе за мир во всём мире вы не оставите камня на камне. Если мне требуется десять произвольных записей, а для обеспечения "вашего детерминизма" придётся отсортировать миллиардную таблицу - "Я буду крайне разочарована. Крайне." (произносится голосом Аллы Демидовой).Как заметил ShSergeПочитайте, уже, хоть что-нибудь о методах доступа к данным. Начать можете всё с той же реляционной алгебры г-на Кодда, которая чётко и однозначно формулирует единственное назначение первичного ключа: однозначная идентификация каждой строки кортежа (данных). В этом определении нет ни одного слова об упорядоченности - только о сравнение на (не)равенство. И хотя эффективная реализация первичных и предполагает использование того или иного варианта "монотонных счётчиков" это - именно что деталь реализации. Опираться на которую, вообще-то, нельзя. Точно так же, как нельзя опираться на устойчивость порядка следования строк кортежа. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 10:19 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov ...И хотя эффективная реализация первичных и предполагает использование того или иного варианта "монотонных счётчиков" это... AFAIK в многопроцессорных/кластерных системах "монотонный счетчик" одна из главных проблем, а не как не эффективная реализация. Был очень сильно удивлен, когда увидел реализацию pk на случайных числах. Почитал в I-net'е, был удивлен еще сильнее, т.к. это бест практис для мейнфреймов. Ну и AFAIK в кластерах/rac'ах основные коллизии и проблемы как раз из-за монотонных ключей/индексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 10:55 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Basil A. Sidorov ...И хотя эффективная реализация первичных и предполагает использование того или иного варианта "монотонных счётчиков" это... AFAIK в многопроцессорных/кластерных системах "монотонный счетчик" одна из главных проблем, а не как не эффективная реализация. Был очень сильно удивлен, когда увидел реализацию pk на случайных числах. Почитал в I-net'е, был удивлен еще сильнее, т.к. это бест практис для мейнфреймов. Ну и AFAIK в кластерах/rac'ах основные коллизии и проблемы как раз из-за монотонных ключей/индексов. Возможно имеется в виду UUID. Но для него существует несколько схем кодирования. Есть такие которые включают МАК-адрес сетевого интерфейса (48 бит) и текущий timestamp. С разной точностью и знаковостью. И еще остается пространство для добавления шумовой случайной информации. Такая схема кодирования достаточна что-б хотя-бы на практическом уровне закрыть вопрос коллизий. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 14:49 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton, А я открою контору, которая каждому гуиду будет выдавать сертификат уникальности. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 15:53 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Я думаю что торговля цифровыми подписями, гарантиями и круговым поручительством - это бизнес будущего. И без централизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 17:16 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton Я думаю что торговля цифровыми подписями, гарантиями и круговым поручительством - это бизнес будущего. И без централизации. Про это тут оффтоп, но отдельной темой можно обсудить. ИМХО тут все очень противоречиво. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 20:58 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton ...Возможно имеется в виду UUID... Нет. Тупо рандом. Используется в Oracle Utilitites CC&B ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2021, 00:05 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev AFAIK в многопроцессорных/кластерных системах "монотонный счетчик" одна из главных проблем А так - выдали каждому потоку "достаточно большой" диапазон и резко сократили конкуренцию за общий счётчик. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2021, 08:50 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton И без централизации. Как вы конфликты-то собрались разрешать? И не конфликты протокола, а вполне материальные тяжбы? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2021, 08:52 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov mayton И без централизации. Как вы конфликты-то собрались разрешать? И не конфликты протокола, а вполне материальные тяжбы? Несколько лет назад некто Филипп Циммерман создавал концепцию такого протокола. Я читал об этом где - то в конце 90х. Я тогда учился в универе. И меня очень впечатлило. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2021, 12:54 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Да протоколами-то всё в порядке. В реальной жизни вы как собрались конфликты решать? С чем, грубо говоря, в суд пойдёте? С хэшами и мнениями приглашённых экспертов? Правда? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 05:51 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
А разве мы ходим в суд если прилетает дырявое обновление от Microsoft или Google? Ходить в суды - это вообще не моя ветка обсуждений. Я просто акцентировал на том что свободные сообщества экспертов могли-бы давать свою оценку качества исходного кода для тех продуктов которыми мы пользуемся каждый день. Остался пустяк - дать нам механизм этой оценки. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 10:35 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
mayton А разве мы ходим в суд если прилетает дырявое обновление от Microsoft или Google? А вот когда речь про деньги - очень даже ходят. Хоть канал Царьград против Googel, хоть MS против Amazon (или наоборот). P.S. Странный инфантилизм: "Я тут фигню про деньги делаю, но как этим пользоваться в реальной жизни - мне вообще пофигу". Сообщества, блин ... Сунули тут недавно сообщество CentOS в анус и где оно теперь, это сообщество? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 11:30 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
У меня нет вопросов к корпорациям. С ними - всё ясно. Я верю в альтруизм людей которые не получают денег но тем не менее продолжают выискивать в исходниках баги. Консолидировать эту энергию - вот задача. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 11:43 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Тогда направление странное выбрано. В той же жабе инструментарий, в основе свой, застрял где-то на уровне Java 6- В тех же сях с инструментарием вообще задница и собрать проект без, условно говоря, make-файла заточенного под конкретный комплиятор - практически невозможно. Но, блин, нет - пилить надо, конечно же, блокчейн, который никому, кроме финансовых спекулянтов никуда не впилсЯ. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 11:48 |
|
Помогите с поиском по 40млн строк в один столбец.
|
|||
---|---|---|---|
#18+
Да. Странное направление. Что поделать. Другие направления уже исчерпали себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2021, 11:55 |
|
|
start [/forum/topic.php?all=1&fid=16&tid=1339638]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
108ms |
get tp. blocked users: |
2ms |
others: | 257ms |
total: | 464ms |
0 / 0 |