Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 выбрать базу, 500 млн записей, 2 поля  [new]
Oik741
Member

Откуда:
Сообщений: 5
Приветствую всех, надумал маленький "проект" написать, самое важное в нем БД,
так как у самого опыта по этому вопросу мало - решил обратиться к Вам за помощью,
Вообщем есть таблица на 100-500 млн записей, всего 2 поля
первое поле - строка из нескольких слов
второе - long int

что нужно от базы - максимально быстро делать выборки из базы одновременно в ~5 потоков

запись в базу будет производиться раз в месяц-два, так что не важна скорость записи, только чтение.
в данный момент у меня все данных в txt файле, и свою задачу я решаю вот так:
автор
cat ~/BASE.txt | grep "WORD" >> ~/выборка.txt


Буду рад всем советам, спасибо.
1 окт 12, 10:18    [13247736]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
АнатоЛой
Member

Откуда: Киев, Украина
Сообщений: 2897
Блог
Oik741
что нужно от базы - максимально быстро делать выборки из базы одновременно в ~5 потоков


1. Что значит "максимально"? Какое конкретно время будет приемлемо? Идеально?
2. Какие именно выборки? Поиск по слову, как в примере? Какой может быть объём возвращаемых данных?

Oik741
запись в базу будет производиться раз в месяц-два, так что не важна скорость записи, только чтение.

Как много данных за один раз будет дописываться? Какое время будет считаться приемлемым? Идеальным?

Oik741
в данный момент у меня все данных в txt файле, и свою задачу я решаю вот так:
cat ~/BASE.txt | grep "WORD" >> ~/выборка.txt

На текущий момент что не устраивает?

Oik741
Буду рад всем советам, спасибо.

Будь конкретней в вопросах, получишь конкретнее ответы.
1 окт 12, 10:37    [13247848]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
miksoft
Member

Откуда:
Сообщений: 38918
Oik741,

Какого рода запросы предполагаются?
1 окт 12, 11:11    [13248079]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Oik741
Member

Откуда:
Сообщений: 5
АнатоЛой
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 млн записей, приемлимыми будут сутки =) идеальными - меньше суток. не критично


АнатоЛой
На текущий момент что не устраивает?

то что шелл я никому не хочу давать а помимо меня базами должны пользоваться люди, для этого делается веб морда, да и не всем понравится такой способ =)

Сообщение было отредактировано: 1 окт 12, 12:14
1 окт 12, 12:02    [13248517]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
miksoft
Member

Откуда:
Сообщений: 38918
Oik741
всего 2 поля
Oik741
от 10 полей до 10-ка тысяч.
Что-то не сходится...
1 окт 12, 12:14    [13248629]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
miksoft
Member

Откуда:
Сообщений: 38918
Oik741
Первое поле содержит в себе строковые данные типа:
слово1 слово2 слово3 слово4
слово1 слово8 слово9 слово37
слово7 слово5
слово6
слово3 слово2 слово22
слово8 слово1
Нормализуйте таблицу, заведите справочник слов и разбейте записи на несколько. Тогда выборка по нужному слову будет происходит намного быстрее.
1 окт 12, 12:16    [13248644]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Yo.!
Guest
тут full-text search нужен. думаю самая простая база с full-text search - mysql
1 окт 12, 12:17    [13248652]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
miksoft
Member

Откуда:
Сообщений: 38918
Yo.!
тут full-text search нужен.
Не нужен, судя по тому, что до сих пор простой греп устраивал.
1 окт 12, 12:18    [13248661]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Yo.!
Guest
miksoft
Yo.!
тут full-text search нужен.
Не нужен, судя по тому, что до сих пор простой греп устраивал.

ну в 21 веке изобретать свой context index, имхо, не самое здоровое занятие.
база маленькая, нагрузка мизерная, значит экономить ресурсы нет смысла и задача, что было как можно меньше кода и возможности напортачить.
1 окт 12, 12:24    [13248705]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Oik741
Member

Откуда:
Сообщений: 5
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к записей.
1 окт 12, 12:39    [13248832]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54759

Oik741
Первое поле содержит в себе строковые данные

И при этом грубо и нагло нарушает первую НФ, что посылает использование индексов лесом.
Извини, в таких условиях grep - наилучшее решение.

Oik741
будет записываться сразу ~100 млн записей

В таких - тоже.

Чувак, тебе не база данных нужна...

Posted via ActualForum NNTP Server 1.5

1 окт 12, 12:40    [13248848]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Yo.!
Guest
Oik741
греп проходится по базе из 210 млн за 2 минуты и 13 секунд, при распаралеливании задачи не знаю насколько просядет скорость.

греп проходит по всему файлику. FTS идекс будет содержать список всех слов и откуда идет ссылка на записи таблицы содержащие слово. если из 10 млн 10к выбирать, то думаю в 10 секунд можно будет уложиться
1 окт 12, 12:46    [13248909]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
lookat
Member

Откуда:
Сообщений: 135
Oik741,

Можете попробовать infobright.org
Это колоночная база с движком MySQL.
Как раз для вашей задачи.
Загрузка из текстового файла очень быстрая.
Размер базы на диске минимальный -- база все сжимает.
Клиент -- любой, который работает с MySQL, например тот же php.

Таблица ваша будет иметь вид:

create table tablename
(
textfield varchar(...) comment 'lookup',
numfield integer
)
engine=brighthouse;

Есть ньюанс с кодировкой -- лучше использовать utf8 и collate=utf8_general_ci
У вас ведь слова могут быть и 'ТАК' и 'Так'?

Удачи.
1 окт 12, 14:08    [13249495]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
S.G.
Member

Откуда: cartoon network
Сообщений: 30611
Oik741 ,
База данных тут неважно какая будет, потянет любая которую сможешь выучить.
Но, структуру тебе надо будет обдумать и поменять.
Но для этого надо по основам БД кое-что почитать.
1 окт 12, 15:58    [13250497]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
АнатоЛой
Member

Откуда: Киев, Украина
Сообщений: 2897
Блог
Oik741
<пропущены детальные требования>

АнатоЛой
На текущий момент что не устраивает?

то что шелл я никому не хочу давать а помимо меня базами должны пользоваться люди, для этого делается веб морда, да и не всем понравится такой способ =)


Если твой текущий способ удовлятворяет <пропущенным детальным требованиям>, то тебе не БД нужна, а нужны:
1) веб-морда, которая позволит получить в удобном виде запросы от пользователей;
2) простенький скрипт на сервере, который эти запросы превратит в shell-script, выполнит его, оценит полученный результат и корректно вернёт пользователю в веб-морду.

Зачем тебе БД в данной задаче?
Варианты:
а) думаешь, что за более сложную программу при прочих равных заказчик заплатит больше денег. Ну, это, как его, вобщем, неправ;
б) изучить что-то новое для СЕБЯ; - тогда топик всё ещё открыт
в) думаешь, что вариант с БД будет быстрее результат выдавать - тогда скажи, какие характеристики у текущего решения;
г) думаешь, что вариант с БД будет выдавать более качественный результат - по топику не заметно...
Вариант с простым интерфесом для пользователя - не требует наличия БД.
А требования к конечному результату у тебя не изменились.
1 окт 12, 17:27    [13251391]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Oik741
Member

Откуда:
Сообщений: 5
АнатоЛой, это исключительно моя инициатива а не проект для продажи =)
потребность в данном сервисе есть у узкого круга людей, к томуже за него готовы платить.
приятно и полезно, плюс в портфолио 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 |
+----------+---------------+---------------------------------------------------------------------------+
1 окт 12, 20:21    [13252297]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Oik741
Member

Откуда:
Сообщений: 5
перечитал пост, много опечаток и непонятных речевых оборотов, надеюсь суть будет понятна =)
извиняюсь.
1 окт 12, 20:24    [13252305]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
miksoft
Member

Откуда:
Сообщений: 38918
Oik741
пожалуй напишу лучше свои планировщик и буду грепать
Т.е. про нормальные формы вам напрасно писали?
1 окт 12, 20:26    [13252307]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54759

Oik741
надеюсь суть будет понятна

Абсолютно понятна. Как я уже сказал, тебе не БД нужна.

Posted via ActualForum NNTP Server 1.5

1 окт 12, 20:27    [13252312]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
Yo.!
Guest
Oik741
минут 15-20 уже думает, пожалуй напишу лучше свои планировщик и буду грепать =)

дык, думать же надо. с чего бы у колочного движка скорость возросла, если он тебе всю колонку вычитать вынужден ?
в чем проблема то FTS индекс сделать ? три минуты же занимает знакомство с синтаксисом
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
1 окт 12, 21:50    [13252586]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
mikron
Member

Откуда:
Сообщений: 888
Тебе наверно лутше посмотретъ сюда.
2 окт 12, 00:07    [13253179]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
DPH3
Member

Откуда:
Сообщений: 456
mikron
Тебе наверно лутше посмотретъ сюда.


Тогда уж лучше сразу на SOLR :)
Но, вообще, да, если нужен текстовый поиск, то лучше специализированные средства.
4 окт 12, 16:09    [13268873]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Dimitry Sibiryakov
Чувак, тебе не база данных нужна...


О, да...

http://sphinxsearch.com/
4 окт 12, 20:20    [13270401]     Ответить | Цитировать Сообщить модератору
 Re: выбрать базу, 500 млн записей, 2 поля  [new]
AHTOH_L
Member

Откуда: Нижний Новгород
Сообщений: 451
Oik741, послушай что говорит Yo.!
21 окт 12, 21:29    [13353352]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить