powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с поиском по 40млн строк в один столбец.
25 сообщений из 79, страница 1 из 4
Помогите с поиском по 40млн строк в один столбец.
    #40077540
bonnie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, уважаемые.
Имеется тхт. файл с около 40кк строк. Строки из 20-30 латинских знаков без пробелов.
Хочу сделать поиск по наличию строки. Простым запросом.
Сейчас текстовый файл переведен в базу sqlite. не принципиальго но посчитал простым решением.
Совсем пионер в теме.
Прошу помощи и совета.

Вот форма поиска:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
 </head>
 <body>
  Искать сейчас!
<form name="f1" method="post" action="search.php">
<input type="search" name="search_q"/></br>
</br>
<input type="submit" value="Поиск"/></br>
</form>
 
 </body>
</html>


Вот скрипт поиска:

Код: 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.
<?php
define('DB_FILENAME', '.\bazza.sqlite');
if( !file_exists(@DB_FILENAME) ) die('File '. DB_FILENAME .' not exists.');
else {
  try {
    $db = new PDO('sqlite:'. @DB_FILENAME);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  } catch(PDOException $e) {
    die($e->getMessage());
  }
}
 
 
$search_q=$_POST['search_q'];
$search_q = trim($search_q);
$search_q = strip_tags($search_q);
 
$res = $db->query("SELECT column1 FROM table1 WHERE column1 LIKE '%$search_q%'");
 
if ($res === true) {
echo 'OK!';
}
else { 
    echo 'NO!';
    } 
 
 
?>




Заранее весьма благодарен за помощь и рекомендации.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40077567
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bonnie
Хочу сделать поиск по наличию строки. Простым запросом.
...
Код: php
1.
$res = $db->query("SELECT column1 FROM table1 WHERE column1 LIKE '%$search_q%'");



Это поиск подстроки. Поиск строки так
Код: sql
1.
... WHERE column1 = '$search_q'


В таком виде можно ускорить индексом по column1
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091527
alex145
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, тоже искал решение на эту задачку
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091660
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем в SQLite-то? Можно прямо в тексте каким-нибудь grep. Он и под Линукс и под Виндовс имеется.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091710
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge
А зачем в SQLite-то? Можно прямо в тексте каким-нибудь grep. Он и под Линукс и под Виндовс имеется.
только если индекс задействовать
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091721
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
ShSerge
А зачем в SQLite-то? Можно прямо в тексте каким-нибудь grep. Он и под Линукс и под Виндовс имеется.
только если индекс задействовать

Какой индекс? Кто и когда индексировать и реиндексировать будет? Я думаю, что греп на таком размере (явно преувеличенном) и так быстро сработает.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091735
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge
kealon(Ruslan)
пропущено...
только если индекс задействовать

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

Если задача одноразовая - то можно и грепом грепнуть.

Если надо искать в данных на регулярной основе - то лучше залить в любую бесплатную базячку
или nosql систему какая есть под рукой.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091779
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

40000000*30=ниачем.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091783
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С. Это 40 миллионов (байтов) умножить на тридцать. Это не гигабайты какие-то.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091796
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь представим себе БД.
Во-первых, заливка, во-вторых индексация. Без индексации - тот же scan, что и грепом. Ну и?
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091802
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
40 млн строк каждая по 30 символов. Это 1 200 000 000 символов.

Ну не знаю. 1.2 Гига почти. Ну не знаю не знаю. Был у нас топик несколько лет назад.
С унификацией. Там как раз тестовые данные у нас были в 1.2 billion. Я даже название
файла запомнил.

Вобщем линейный поиск (а так работает греп) будет в среднем как время поиска по половине
этой коллекции. Даже если это все в оперативке - лежит все равно надо подождать.

Ништяк говоришь?
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091807
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ништяк.
Просто потому, что спроектировать и создать базу, загрузить в неё сорок миллионов строк, построить индексы и запросы ...
Да за это время эту базу можно будет про-grep-ать раз цать. А то и сот.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091808
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

так явно же ему ни раз надо будет поиск делать, иначе бы прогрепал и всё, а не на форуме вопрос задавал
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091812
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда вариант Димы - самый быстрый. Загрузить в sqlite.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091864
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тогда вариант Димы - самый быстрый. Загрузить в sqlite.

А если не один раз, то что, опять загружать?
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091870
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge
mayton
Тогда вариант Димы - самый быстрый. Загрузить в sqlite.

А если не один раз, то что, опять загружать?
зачем опять загружать? загрузил и пользуйся
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091886
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
ShSerge
пропущено...

А если не один раз, то что, опять загружать?
зачем опять загружать? загрузил и пользуйся

Возможно он прав. sqlite - это всё таки не PG и не оракл. Ему недостаточно сделать fopen(...)
сегмента данных. Ему надо реально прогрузить всю ботву в memory.

Вы хоть раз заглядывали в sqlite-дамп? Это-же не блочный сегмент данных. Это чортов CSV.
Хотя... я смотрел туда лет 5 назад. Как щас не знаю. Но вряд-ли что-то сильно
изменилось.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091895
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
kealon(Ruslan)
пропущено...
зачем опять загружать? загрузил и пользуйся

Возможно он прав. sqlite - это всё таки не PG и не оракл. Ему недостаточно сделать fopen(...)
сегмента данных. Ему надо реально прогрузить всю ботву в memory.

В sqlite те же принципы что во взрослых СУБД: данные страницами хранятся, нужные страницы закачиваются в кэш и т.д. и т.п. Так что однократно залить, проиндексировать и при поиске по индексу будут читаться только нужные страницы.

Залить в sqlite ТС сам решил. Зачем? Может ему так лучше, боюсь ответа мы не узнаем, он тут больше не появлялся.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091897
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
пропущено...

Возможно он прав. sqlite - это всё таки не PG и не оракл. Ему недостаточно сделать fopen(...)
сегмента данных. Ему надо реально прогрузить всю ботву в memory.

В sqlite те же принципы что во взрослых СУБД: данные страницами хранятся, нужные страницы закачиваются в кэш и т.д. и т.п. Так что однократно залить, проиндексировать и при поиске по индексу будут читаться только нужные страницы.

Залить в sqlite ТС сам решил. Зачем? Может ему так лучше, боюсь ответа мы не узнаем, он тут больше не появлялся.

Он же не в хибернейт свой сервак опускает? Ему нужен shutdown периодически. И после рестарта
- поднятие БД (быстрое в том же виде как и было). Не импорт а именно монтирование
дата-файлов.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091900
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Он же не в хибернейт свой сервак опускает? Ему нужен shutdown периодически. И после рестарта
- поднятие БД (быстрое в том же виде как и было). Не импорт а именно монтирование
дата-файлов.

Он готовый файл с БД использует, это по коду видно
bonnie
Вот скрипт поиска:
Код: php
1.
2.
3.
4.
<?php
define('DB_FILENAME', '.\bazza.sqlite');
if( !file_exists(@DB_FILENAME) ) die('File '. DB_FILENAME .' not exists.');
...

...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091902
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я помню, в SQLite очень долго происходят операции изменения данных. Чтение, да, быстрое. Несколько убыстрить его получится грамотным управлением транзакций. Но нафига это все, если за несколько миллисекунд можно регулярным выражением в грепе, или ещё в чем-то.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091904
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо. А сколько секунд или милисекунд у него занимает эта операция?

Код: php
1.
2.
$db = new PDO('sqlite:'. @DB_FILENAME);
$res = $db->query("SELECT * FROM table1 LIMIT 1");



Тоесть я хочу понять метрику "готовность системы выдать 1-й байт выборки" (Time to first byte (TTFB)) для двигателя sqlite
в соотношении к Postgresql к примеру. Разумеется я буду жесток и буду требовать время холодного старта тоже включить
в это измерение.

Мне это интересно потому что это тоже юзейс данного топика.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091908
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему опыту, на однострочных INSERT/SELECT SQLLite примерно в 7-10 раз быстрее PostgreSQL

Просто потому, что не нужно общение через TCP/IP.

Время "холодного cтарта" сервиса PostreSQL или Oracle Entrprise Edition, тем более и рядом с SQLLite не стояло )))

p.s. железо - бесплатный и medium (4 Gb ram) инстанс Amazon EC2
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091909
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge
...Насколько я помню, в SQLite очень долго происходят операции изменения данных...

Я помню совершенно обратное.

Мне нужно было создать простейшую базу из 3-4-х полей, где-то под 50 лямов строк, но были частые INSERT/SELECT'ы отдельных позиций. Переход с PostgreSQL на SQLLite ускорил минимум раз в 7-10, а то и больше. Приложение однопоток, парсер сайта с расписаниями авиа-перелетов.
...
Рейтинг: 0 / 0
Помогите с поиском по 40млн строк в один столбец.
    #40091915
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вечерком проведу эксперимент на 1 лярде строк. По холодному старту.
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 1 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с поиском по 40млн строк в один столбец.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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