Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
Суть проблемы такова : Имеется текстовый документ ,в нем примерно 2млрд строк ,нужно это все перенести в БД ,для удобного и быстрого поиска по этой Бд . Создаю БД таким запросом : Код: plsql 1. 2. 3. 4. 5. 6. 7. Т.е в итоге получалась таблица с 3 колонками: id,data_1,data_2 . Индексация была на столбце id. После чего загружал в таблицу значения через CSV using LOAD DATA. Тип таблиц пытался использовать и MyISAM и InnoDB. Но при поиск через запрос : Код: plsql 1. Идет бесконечный поиск ,и в итого не выдает никаких результатов вовсе. Хотелось что бы вы мне указали на мои ошибки ,или подсказали оптимальный вариант . Уже достаточно много прогуглил ,прочитал ,но решения так и не нашел . P.s. Железо относительно не плохое , БД на SSD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 12:41 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
Вопрос 1: У Вас 2 млрд. записей. При этом Вы выбираете для поля ID тип INT, для которого 2ккк - это на пределе... почему? объявили бы хотя бы UNSIGNED... Вопрос 2: Зачем вообще нужен ID? Вопрос 3: Как Вы думаете, каким образом сервер будет искать записи, соответствующие условию? правильно - читать все записи и искать... т.е. ему, чтобы выполнить запрос, нужно прочитать и обработать все сколько-то там гигабайтов данных таблицы... неудивительно, что ему плохеет. Тем более если результат ожидается объёмный - его же до выдачи надо где-то хранить... Для ускорения требуется как минимум индексация. Но создание обычного индекса по строковым полям при таком количестве записей - затея, заранее обречённая на провал. Для того, чтобы получить вменяемый результат (поиск за удовлетворительное время), необходимо на таких объёмах использовать иные средства индексации. Как минимум это полнотекстовый индекс и соответственно полнотекстовый поиск - но думаю, что на таких объёмах и ему не будет хорошо... Я бы предложил рассмотреть внешние средства индексации и поиска. Типа Sphinx, Elasticsearch и аналогичные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 13:23 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
chita199853, Для показанного поиска проще оставить данные в текстовом файле. Описывайте задачу целиком, а не вашу попытку ее решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 16:54 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
Интересный встречный вопрос: а Вы данные в базу заносите построчно или по словам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 18:27 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
miksoft, Зада : Загрузить все данные в БазуДанных , для последующего поиска по ней... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 18:52 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
stanilar, Построчно . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 18:53 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
chita199853Загрузить все данные в БазуДанныхЗачем именно в БД? Почему не просто текстовый файл, почему не другие структуры? chita199853для последующего поиска по нейКакой именно должен быть поиск? По равенству строки? По словам? По вхождению подстроки? По маске? С учетом морфологии или без? Если с учетом, то на каком языке? А что с кодировкой? Эти и масса других вопросов возникают из-за того, что вы пытаетесь описать не задачу, а вашу попытку ее решения. Есть ощущение, что это учебная задача, которую нужно сделать так только потому, что так сказал преподаватель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 19:47 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
miksoft, Есть 2 файла. 1)txt файл , где находятся строки значение_1:значение_2 . 2)txt файл ,в котором находятся строки : значение_1 . Мне нужно брать значение_1 из второго файла ,и искать в его в первом файле . В случае если совпадение есть ,в результирующий файл , пусть это будет Результат.txt, записывается строка из первого файла ,т.е значение_1:значение_2 . Сложность в том ,что первый файл весит под 100гб . Надеюсь доходчиво расписал . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 20:08 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
chita199853, Пара вопросов. Задача разовая или периодическая? Много ли строк во втором файле? Если, всё же, задача разовая, а во втором файле строк немного, то grep категорически не годится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 20:29 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
vkle, Тут скорее периодическая .Т.к есть второй вариант работы. Принцип остается такой же как и раньше ,но во втором файле уже строка вида Значение_1:Значение_2 ,так же как и в 1 файле. Поиск по прежнему идет по Значение_1 ,но уже если его НЕ находит ,то добавляет эту строку(значение_1:значение_2 из 2 файла) в первый файл. Много тавтологии ,но вроде бы доступно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 20:49 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
vkle, Строк во втором файле не много . Всегда меньше 1млн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 21:06 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
vklegrepВот да, grep мне пока больше всего нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 21:21 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
Переносы учитываются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2018, 05:21 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
сделайте индекс по первым 3м буквам и по остальным буквам, да и всё первые 3 буквы от 2 ярдов оставят 100к, а по ним быстро найдёт даже без индекса т.е. как-то так: KEY (col1(3),col2(10)) и когда текст вводите, то через JS ждите 3х букв, только потом ищите, а также пауза между вводом и поиском должна быть 1с, т.е. сначала должны остановиться печатать, а потом уже поиск идёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2018, 11:27 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
tip78индекс по первым 3м буквамЗависит от того, что на самом деле в "Значение_1". Если там что-то типа "long_text_label1000000","long_text_label1000001","long_text_label1000002",..., то индекс по трем первым символам будет явно мал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2018, 21:09 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
Еще можно попробовать так - большую таблицу подключить как CSV table , а меньшую загрузить как MEMORY . И запрос написать так, чтобы в JOIN-е первая была ведущей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2018, 21:13 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
miksofttip78индекс по первым 3м буквамЗависит от того, что на самом деле в "Значение_1". Если там что-то типа "long_text_label1000000","long_text_label1000001","long_text_label1000002",..., то индекс по трем первым символам будет явно мал. чё серьёзно думаете, что в машинном коде индексы так выглядят? т.е. в каждой строке будет "long_text_label", а только потом сам стринг и такой же поиск )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 17:22 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
tip78, Не очень понял про машинный код. Но если MySQL указать, что нужно проиндексировать первые три символа, то в индексе и будут эти три символа. В моем примере они будут одинаковые для всех записей и индекс не будет иметь смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 19:21 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
miksoft, ну у вас пример откровенно смешной, нет там таких индексов про машинный код - откройте файл БД на диске ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 19:56 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
tip78miksoft, ну у вас пример откровенно смешной, нет там таких индексов про машинный код - откройте файл БД на дискеу него нормальный пример, а вот про машинный код - это совсем не понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 10:16 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
вадяпро машинный код - это совсем не понятно Че там не понятно? tip78 откровенно тупит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 12:00 |
|
||
|
Медленная работа поиска MySQL .
|
|||
|---|---|---|---|
|
#18+
непонятно вам, а туплю я - классика miksofttip78индекс по первым 3м буквамЗависит от того, что на самом деле в "Значение_1". Если там что-то типа "long_text_label1000000","long_text_label1000001","long_text_label1000002",..., то индекс по трем первым символам будет явно мал. 1. если у вас такие записи, то храните уже 1000000 1000001 1000002 или ищите именно цифры а если нет, то авторпервые 3 буквы от 2 ярдов оставят 100к, а по ним быстро найдёт даже без индекса 2. у ТС там пользовательские логины, так что мимо 3. индекс всегда можно до 10 поднять или сколько надо 4. пример смешной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 14:34 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=47&tid=1830126]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 159ms |

| 0 / 0 |
