|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Приветствую всех, надумал маленький "проект" написать, самое важное в нем БД, так как у самого опыта по этому вопросу мало - решил обратиться к Вам за помощью, Вообщем есть таблица на 100-500 млн записей, всего 2 поля первое поле - строка из нескольких слов второе - long int что нужно от базы - максимально быстро делать выборки из базы одновременно в ~5 потоков запись в базу будет производиться раз в месяц-два, так что не важна скорость записи, только чтение. в данный момент у меня все данных в txt файле, и свою задачу я решаю вот так: авторcat ~/BASE.txt | grep "WORD" >> ~/выборка.txt Буду рад всем советам, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 10:18 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741что нужно от базы - максимально быстро делать выборки из базы одновременно в ~5 потоков 1. Что значит "максимально"? Какое конкретно время будет приемлемо? Идеально? 2. Какие именно выборки? Поиск по слову, как в примере? Какой может быть объём возвращаемых данных? Oik741запись в базу будет производиться раз в месяц-два, так что не важна скорость записи, только чтение. Как много данных за один раз будет дописываться? Какое время будет считаться приемлемым? Идеальным? Oik741в данный момент у меня все данных в txt файле, и свою задачу я решаю вот так: cat ~/BASE.txt | grep "WORD" >> ~/выборка.txt На текущий момент что не устраивает? Oik741Буду рад всем советам, спасибо. Будь конкретней в вопросах, получишь конкретнее ответы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 10:37 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741, Какого рода запросы предполагаются? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 11:11 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
АнатоЛой1. Что значит "максимально"? Какое конкретно время будет приемлемо? Идеально? каждый запрос может выполняться до 10-20 минут при условии что одновременно выполняется 5-10 выборок АнатоЛой2. Какие именно выборки? Поиск по слову, как в примере? Какой может быть объём возвращаемых данных? Первое поле содержит в себе строковые данные типа: слово1 слово2 слово3 слово4слово1 слово8 слово9 слово37слово7 слово5слово6слово3 слово2 слово22слово8 слово1 делая из них выборку по ключевому слову "слово1" получаем выборку вида слово1 слово2 слово3 слово4 слово1 слово8 слово9 слово37слово8 слово1 объем от 10 записей до 10-ка тысяч. АнатоЛойКак много данных за один раз будет дописываться? Какое время будет считаться приемлемым? Идеальным? будет записываться сразу ~100 млн записей, приемлимыми будут сутки =) идеальными - меньше суток. не критично АнатоЛойНа текущий момент что не устраивает? то что шелл я никому не хочу давать а помимо меня базами должны пользоваться люди, для этого делается веб морда, да и не всем понравится такой способ =) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:02 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741всего 2 поляOik741от 10 полей до 10-ка тысяч.Что-то не сходится... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:14 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741Первое поле содержит в себе строковые данные типа: слово1 слово2 слово3 слово4слово1 слово8 слово9 слово37слово7 слово5слово6слово3 слово2 слово22слово8 слово1Нормализуйте таблицу, заведите справочник слов и разбейте записи на несколько. Тогда выборка по нужному слову будет происходит намного быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:16 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
тут full-text search нужен. думаю самая простая база с full-text search - mysql ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:17 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Yo.!тут full-text search нужен.Не нужен, судя по тому, что до сих пор простой греп устраивал. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:18 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
miksoftYo.!тут full-text search нужен.Не нужен, судя по тому, что до сих пор простой греп устраивал. ну в 21 веке изобретать свой context index, имхо, не самое здоровое занятие. база маленькая, нагрузка мизерная, значит экономить ресурсы нет смысла и задача, что было как можно меньше кода и возможности напортачить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:24 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
miksoft, это оговорочка была, я написал модератору и попросил исправить, от 10 до 10-ка тысяч записей в выборке. и по поводу full-text search прокомментировать ничего не могу, но запросы в полном виде примерно такие cat somefile.txt | grep SOME_WORD | grep -v ANOTHER_WORD | grep -v STOP_WORD >> output.txt тоесть при выборке учитываются "исключающие" слова, но это можно будет и реализовать и без помощи БД. Вообщем все что нужно - найти те записи которые в строковом поле содержат нужное СЛОВО. греп проходится по базе из 210 млн за 2 минуты и 13 секунд, при распаралеливании задачи не знаю насколько просядет скорость. автор[12:31 PM] oik@srv [~/Base] $ time cat base.txt | grep "идеокурс" | grep -v "есплатно" >> ~/test_out.txt real 2m13.368s user 0m9.353s sys 0m18.477s [12:33 PM] oik@srv [~/Base] $ cat base.txt | wc -l 210408631 в тестовой выборке из примера вышло 10к записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:39 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741Первое поле содержит в себе строковые данные И при этом грубо и нагло нарушает первую НФ, что посылает использование индексов лесом. Извини, в таких условиях grep - наилучшее решение. Oik741будет записываться сразу ~100 млн записей В таких - тоже. Чувак, тебе не база данных нужна... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:40 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741греп проходится по базе из 210 млн за 2 минуты и 13 секунд, при распаралеливании задачи не знаю насколько просядет скорость. греп проходит по всему файлику. FTS идекс будет содержать список всех слов и откуда идет ссылка на записи таблицы содержащие слово. если из 10 млн 10к выбирать, то думаю в 10 секунд можно будет уложиться ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 12:46 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741, Можете попробовать infobright.org Это колоночная база с движком MySQL. Как раз для вашей задачи. Загрузка из текстового файла очень быстрая. Размер базы на диске минимальный -- база все сжимает. Клиент -- любой, который работает с MySQL, например тот же php. Таблица ваша будет иметь вид: create table tablename ( textfield varchar(...) comment 'lookup', numfield integer ) engine=brighthouse; Есть ньюанс с кодировкой -- лучше использовать utf8 и collate=utf8_general_ci У вас ведь слова могут быть и 'ТАК' и 'Так'? Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 14:08 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741 , База данных тут неважно какая будет, потянет любая которую сможешь выучить. Но, структуру тебе надо будет обдумать и поменять. Но для этого надо по основам БД кое-что почитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 15:58 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741<пропущены детальные требования> АнатоЛойНа текущий момент что не устраивает? то что шелл я никому не хочу давать а помимо меня базами должны пользоваться люди, для этого делается веб морда, да и не всем понравится такой способ =) Если твой текущий способ удовлятворяет <пропущенным детальным требованиям>, то тебе не БД нужна, а нужны: 1) веб-морда, которая позволит получить в удобном виде запросы от пользователей; 2) простенький скрипт на сервере, который эти запросы превратит в shell-script, выполнит его, оценит полученный результат и корректно вернёт пользователю в веб-морду. Зачем тебе БД в данной задаче? Варианты: а) думаешь, что за более сложную программу при прочих равных заказчик заплатит больше денег. Ну, это, как его, вобщем, неправ; б) изучить что-то новое для СЕБЯ; - тогда топик всё ещё открыт в) думаешь, что вариант с БД будет быстрее результат выдавать - тогда скажи, какие характеристики у текущего решения; г) думаешь, что вариант с БД будет выдавать более качественный результат - по топику не заметно... Вариант с простым интерфесом для пользователя - не требует наличия БД. А требования к конечному результату у тебя не изменились. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 17:27 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
АнатоЛой, это исключительно моя инициатива а не проект для продажи =) потребность в данном сервисе есть у узкого круга людей, к томуже за него готовы платить. приятно и полезно, плюс в портфолио java junior'а =) хотел использовать базу т.к. есть возможность попрактиковаться с jdbc да и в лице работодателя продукт который требуется спросом будет увесистей чем студ. проект =) сеичас поставил infobright и заливаю базу, посравниваю скорость выборки одиночные, параллельно исполняемые. в завасимости от результатов останусь на БД либо напишу планировщик и скину текстовой файл на два разных диска(чтобы немного расширить рамки I/O в которые я упираюсь сеичас) пока писал пост залилась, поставил запрос: авторselect * from keywords where (locate(lower('идеокурс'),lower(keyword))>0); минут 15-20 уже думает, пожалуй напишу лучше свои планировщик и буду грепать =) авторmysql> show profiles; +----------+---------------+---------------------------------------------------------------------------+ | Query_ID | Duration | Query | +----------+---------------+---------------------------------------------------------------------------+ | 1 | 1353.33723800 | select * from keywords where (locate(lower('????????'),lower(keyword))>0) | | 2 | 0.23863600 | select * from keywords limit 20 | +----------+---------------+---------------------------------------------------------------------------+ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 20:21 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
перечитал пост, много опечаток и непонятных речевых оборотов, надеюсь суть будет понятна =) извиняюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 20:24 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741пожалуй напишу лучше свои планировщик и буду грепатьТ.е. про нормальные формы вам напрасно писали? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 20:26 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741надеюсь суть будет понятна Абсолютно понятна. Как я уже сказал, тебе не БД нужна. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 20:27 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Oik741минут 15-20 уже думает, пожалуй напишу лучше свои планировщик и буду грепать =) дык, думать же надо. с чего бы у колочного движка скорость возросла, если он тебе всю колонку вычитать вынужден ? в чем проблема то FTS индекс сделать ? три минуты же занимает знакомство с синтаксисом http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2012, 21:50 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
Тебе наверно лутше посмотретъ сюда . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 00:07 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
mikronТебе наверно лутше посмотретъ сюда . Тогда уж лучше сразу на SOLR :) Но, вообще, да, если нужен текстовый поиск, то лучше специализированные средства. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2012, 16:09 |
|
выбрать базу, 500 млн записей, 2 поля
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2012, 20:20 |
|
|
start [/forum/topic.php?fid=35&fpage=9&tid=1552510]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 259ms |
total: | 391ms |
0 / 0 |