Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Какое железо мне надо? И как лучше организовать?


Автор: Vasay 17.4.2009, 23:37
Есть у меня такая информация:

имя человека
дата
доп информация.

Записей 150 миллионов. Нужно делать селекты: Вывести все записи по имени, или по дате. 

Думаю имя стоит хешировать в инт и искать по инту.

Вопрос - какое железо мне надо для решения этой задачи? И как оптимально спроектировать базу и запросы, чтоб получить максимальную производительность? 

И какую БД вообще выбрать для этой задачи? Может какая-то конкретная лучше адаптирована для решения подобных задач? 

Автор: Akella 18.4.2009, 11:56
Цитата(Vasay @  17.4.2009,  23:37 Найти цитируемый пост)
Вывести все записи по имени, или по дате. 

все - это в смысле все 150 миллионов записей показать на клиенте??

Добавлено через 4 минуты и 28 секунд
Цитата(Vasay @  17.4.2009,  23:37 Найти цитируемый пост)
И какую БД вообще выбрать для этой задачи?

Я бы выбрал oracle или mssql. Хотя не знаю, может и firebird подойдёт.
Тебе нужно однозначно выбирать серверную системную плату с hardware`ным raid контроллером. http://hardraid.fromru.com/interf/scsi.html.

Автор: Vasay 18.4.2009, 13:37
Akella, 

Цитата

все - это в смысле все 150 миллионов записей показать на клиенте??


Не не сразу 150 миллионов, а с условием зависящим от имени и даты.


Цитата

Тебе нужно однозначно выбирать серверную системную плату с hardware`ным raid контроллером. Выбрать винчестер. 


Спасибо - пошел изучать вопрос.

Цитата

Я бы выбрал oracle или mssql. Хотя не знаю, может и firebird подойдёт.


А можно немного аргументов?
 

Автор: Akella 18.4.2009, 16:32
Ну oracle или mssql достаточно мощные и серъёзные СУБД. А firebird ещё и кроссплатформенная.

Автор: DimW 20.4.2009, 06:58
Цитата(Akella @  18.4.2009,  16:32 Найти цитируемый пост)
А firebird ещё и кроссплатформенная.

точно так же как и Оракл.

Цитата(Vasay @  17.4.2009,  23:37 Найти цитируемый пост)
И какую БД вообще выбрать для этой задачи?

а ты уверен что тебе вообще СУБД нужна? Если да то ИМХО это должно быть безплатно и просто, mySQL возможно подойдет.
Хранение одной таблицы из трех полей задача ну ни как не MsSQL и Oracle. 

Автор: Vasay 20.4.2009, 08:40
Цитата

Если да то ИМХО это должно быть безплатно 


Я с этим тоже согласен smile Но даже среди бесплатных решений есть выбор.

Просто я думал, что, возможно, из-за каких-нибудь (неизвестных мне) архитектурных особенностей одна база данных будет иметь преимущества над другой в моей задаче... 
Если нет, то я, пожалуй, остановлю свой выбор на любимой мной PostgreSQL.

Остался вопрос с железом. Сейчас решил потестить на своем ноутбуке (AMD x2 tl60, 2Gb озу) - посмотрю что будет (в данный момент вгоняю дамп базы)

Автор: Akella 20.4.2009, 11:51
Постгрес умеет работать с многоядерными процессорами ли с несколькими процессорами?

Автор: Vasay 20.4.2009, 12:39
Akella, 

Умеет. 


Автор: Vasay 21.4.2009, 21:00
Вот думаю, стоит ли объединять винчи в RAID-0 если ОЗУ будет больше чем размер базы?

Может от греха подальше в RAID 1. Много ли я потеряю в скорости?

Автор: Vasay 22.4.2009, 02:25
Вообщем, поигрался на своей машине (на MySQL - т.к. она у меня уже была установлена). 

К сожалению вставка дампа при установленном индексе (char(16) на строку char(32), полученную, как md5 от строки в нижнем регистре)  шла очень медленно. Вставил 15 миллионов записей за сутки (без индекса вставил 70 миллионов за час, индекс делает уже восьмой час...). Поиск по char(32) в базе с 15 миллионами записей занимал сотые доли секунды (при наличие индекса). 

Сервер решил взять самый мощный, из тех что были: 
Core 2 Quad, 2x500 GB, 8 GB. Надеюсь, поиск будет достаточно быстрый.  

Такой конфиг сразу отбрасывает следующие ДБ (всвязи с тем, что платить за БД я, пока, не хочу):

1. Oracle Database 10g Express Edition 
т.к.
http://www.oracle.com/technology/products/database/xe/index.html

2. IBM DB2 Express-C
т.к.
http://www-01.ibm.com/software/data/db2/express/about.html?S_TACT=index&S_CMP=expcsite

3 MsSQL 2005 (по 2008 инфы по ограничениям не нашел :-( )
т.к.
http://www.microsoft.com/rus/msdn/vstudio/express/support/faq/default.mspx#sql
+ http://gibibits.com/index.php?dn=down&to=open&id=12

И так, выбор сейчас такой - 

1. PostgreSQL
2. MaxDB
3. MySQL  

Вопрос такой - что будет быстрее для моей простой задачи - селекта  из простенькой таблички, но с большим количеством записей?

Кстати, у этих бд нет никаких ограничений?

Автор: Akella 22.4.2009, 08:14
А разве мускул абсолютно бесплатный?

Автор: DimW 22.4.2009, 09:08
Цитата(Akella @  22.4.2009,  08:14 Найти цитируемый пост)
А разве мускул абсолютно бесплатный? 

в сложившейся ситуации о мускуле как о "перспективе" теперь говорить сложно: http://kontrakty.ua/content/view/8633/129/
на самом деле думал что безплатно.

Автор: Vasay 22.4.2009, 10:18
DimW, 

Цитата

А разве мускул абсолютно бесплатный?


Абсолютно. Он не бесплатен только в случае, если вы хотите включить его код в свое приложение и хотите закрыть его код,  т.е. не согласны с лицензией GPL.

Цитата

в сложившейся ситуации о мускуле как о "перспективе" теперь говорить сложно: тынц
на самом деле думал что бесплатно. 


Мда, интересная новость. Хотя мускул продукт открытый, убить его не так просто.

Автор: DimW 22.4.2009, 10:37
Цитата(Vasay @  22.4.2009,  10:18 Найти цитируемый пост)
Хотя мускул продукт открытый, убить его не так просто.

достаточно просто прекратить поддержку, но вряд ли...

Автор: Poseidon 22.4.2009, 11:11
Vasay, Оракл используй. 150 миллионов - это уже промышленные размеры (кстати, где ты столько набрал?). Тут не имеет значения что табличка простенькая. SELECT в любой БД будет быстрым, а вот вставка и переиндексация... Я бы Oracle выбрал.

Автор: Vasay 22.4.2009, 11:13
Блин 24 часа прошло, а индекс еще не сделан :-( (это на моем буке и MySQL)

Добавлено @ 11:26
Poseidon, 

Мне не нужна ни вставка ни переиндексация. База будет просто периодически заменятся на новую. Мне просто нужен очень быстрый селект.

Цитата

кстати, где ты столько набрал?

Чуть попозже скажу smile


Цитата

Я бы Oracle выбрал. 

Я так подумал - мне дешевле будет иметь кластер с каким-нибудь PostgreSQL чем купить лицензию на оракл. 
Для того что бы задействовать на полную тот сервер который я сейчас взял, мне надо купить лицензию за 17,500$ Я к этому немного не готов.

Автор: Poseidon 22.4.2009, 12:20
Цитата(Vasay @  22.4.2009,  11:13 Найти цитируемый пост)
Мне не нужна ни вставка ни переиндексация. База будет просто периодически заменятся на новую.
Это сейчас не нужна, в вдруг... Да и как будет проходить замена? Откуда будет браться новавая? В любом случае ее нужно будет создавать и выполнять вставку. Может случится интересная ситуацтия, когда данные еще не вставились (а вставляться они будут несколько суток), а их уже нужно изменить.

Автор: Vasay 22.4.2009, 12:40
Poseidon, 

Эта база - справочник, сохраняющий свою актуальность в течении года. 

Предоставляется она в виде текстового файла. У меня есть программа которая читает этот файл, дополняет информацией из другой базы и делает SQL дамп. 

Раз в год могу и на профилактику закрыться для обновления базы. 

17,500$ за лицензию на Oracle - для меня не реально! 

Автор: Akella 24.4.2009, 16:34
Цитата(Vasay @  22.4.2009,  11:13 Найти цитируемый пост)
Для того что бы задействовать на полную тот сервер который я сейчас взял, 

И что за конфиг сервера?

Автор: Vasay 24.4.2009, 17:38
Akella, 

Я писал выше: Core 2 Quad, 2x500 GB, 8 GB.

А в отличие от IBM у которой с 2006 года лицензии считаются "per unit" а не "per core". У Oracle немного сложнее

Правда я ошибся у Oracle для интеловских многоядерных процессоров множетель 0,5
т.е. Core 2 Quad приравнивается к двухпроцессорной системе, а не 4х.

И мне бы хватило Oracle Database 10g Standard Edition One
http://www.oracle.com/global/ru/ip/10g/database/index.html

Цена 5,800$

Добавлено через 6 минут и 9 секунд
Хотя, нет... все немного хуже 
http://www.oracle.com/global/ru/pdfs/tech/10gseone.pdf

Цитата

$4995 в расчете на один процессор (до двух процессоров на одном сервере)


т.е. 4995*2 = 9990$ 

Автор: Akella 24.4.2009, 18:56
Так у тебя же один процессор, просто он многоядерный. Или считается каждое ядро?

Автор: Vasay 24.4.2009, 19:05
Akella, 

Если я не ошибаюсь:

У IBM считается каждый процессор.
У oracle считается за ядро, но для прцессоров intel и amd количество ядер умножается на 0.5 т.е. если у меня 4 ядра, то я плачу как за 2 процессора.

Автор: Akella 24.4.2009, 19:18
Не знаю, ставил бы ты что-то бесплатное и не морочил то, что на Пасху красят.

Автор: Rififi 24.4.2009, 19:52
Vasay, 
приоритетом является дисковая подсистема - от скорости её работы зависит всё остальное - если винты тормозят, тебя никакой оракл не спасёт
для этого нужен аппаратный raid-контроллер и 4 sas hdd в рейде 0+1
цена вменяемого контроллера на 4 порта начинается от 400$, смотреть на Adaptec, Intel, 3Ware.

Автор: Vasay 24.4.2009, 22:32
Akella, 
Цитата

Не знаю, ставил бы ты что-то бесплатное и не морочил то, что на Пасху красят. 


Так на предыдущей странице я и сказал, что выбираю из бесплатных решений.


Rififi, 
пока такой возможности нет. есть 2 диска. В raid 0 их объединить можно, но я пока не стал. Посмотрю насколько быстро будет работать без этого.

Пока внес в базу 20мл записей - селект по md5 с индексом char(16) идет тысячные доли секунды. 

п.с. тестирую пока на MySQL 5.0.67-community  (она уже была на сервере, когда мне его отдали)

Автор: Akella 24.4.2009, 22:51
а ОС какая?

Автор: Vasay 24.4.2009, 23:11
Akella, 

CentOS с ядром 2.6.28

Самое интересное, что он 32х битный (i686) с поддержкой ОЗУ больше 4ГБ. Мне сказали что это будет лучше, чем x64.
Честно - не знаю чем. Но настаивать на x64 не стал - админу виднее.
8 гигов система видит, top в данный момент (идет заполнение базы), говорит
Mem:   8006868k total,  7756660k used,   250208k free,    56020k buffers

Автор: LSD 27.4.2009, 19:06
Цитата(Vasay @  24.4.2009,  23:11 Найти цитируемый пост)
Самое интересное, что он 32х битный (i686) с поддержкой ОЗУ больше 4ГБ. Мне сказали что это будет лучше, чем x64.
Честно - не знаю чем. Но настаивать на x64 не стал - админу виднее.

Админ и DBA это два разных человека smile

Не знаю как MySQL (я так понял ты его тестируешь?), но Oracle при наличии более 2-х Гб памяти, лучше использовать 64-х битный.

Автор: Bikutoru 29.4.2009, 08:50
Цитата(Vasay @  22.4.2009,  12:13 Найти цитируемый пост)
Блин 24 часа прошло, а индекс еще не сделан :-( (это на моем буке и MySQL)

А как ты вставляешь данные? Практика показывает, что самый быстрый способ вставки данных в MySQL - это LOAD DATA INFILE в пустую таблицу.

Добавлено @ 08:51
Плюс можно с буферами поиграться: http://venublog.com/2007/11/07/load-data-infile-performance/

Автор: Vasay 29.4.2009, 10:50
Bikutoru, 

Да данные я вставил быстро, после чего решил сделать индекс по одному столбцу - так и не сделал на ноуте.

На сервере вставил уже всю базу, стал делать индекс - за 48 часов он его не сделал... Операцию отменил сейчас думаю что делать. 

Автор: Bikutoru 29.4.2009, 13:27
Цитата(Vasay @  29.4.2009,  11:50 Найти цитируемый пост)
Да данные я вставил быстро, после чего решил сделать индекс по одному столбцу - так и не сделал на ноуте.

На сервере вставил уже всю базу, стал делать индекс - за 48 часов он его не сделал... Операцию отменил сейчас думаю что делать.  


Я в таких случаях сливаю базу в текстовый файл через 
Код

SELECT * FROM table INTO OUTFILE 'file'

После этого создаю новую таблицу с новыми индексами и вставляю туда данные через LOAD DATA INFILE. На сервере таким образом модифицировал таблицу c ~ 100 миллионами записей за 3-4 часа.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)