| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Какое железо мне надо? И как лучше организовать? |
| Автор: Vasay 17.4.2009, 23:37 |
| Есть у меня такая информация: имя человека дата доп информация. Записей 150 миллионов. Нужно делать селекты: Вывести все записи по имени, или по дате. Думаю имя стоит хешировать в инт и искать по инту. Вопрос - какое железо мне надо для решения этой задачи? И как оптимально спроектировать базу и запросы, чтоб получить максимальную производительность? И какую БД вообще выбрать для этой задачи? Может какая-то конкретная лучше адаптирована для решения подобных задач? |
| Автор: Akella 18.4.2009, 11:56 |
все - это в смысле все 150 миллионов записей показать на клиенте?? Добавлено через 4 минуты и 28 секунд Я бы выбрал oracle или mssql. Хотя не знаю, может и firebird подойдёт. Тебе нужно однозначно выбирать серверную системную плату с hardware`ным raid контроллером. http://hardraid.fromru.com/interf/scsi.html. |
| Автор: Vasay 18.4.2009, 13:37 | ||||||
Akella,
Не не сразу 150 миллионов, а с условием зависящим от имени и даты.
Спасибо - пошел изучать вопрос.
А можно немного аргументов? |
| Автор: Akella 18.4.2009, 16:32 |
| Ну oracle или mssql достаточно мощные и серъёзные СУБД. А firebird ещё и кроссплатформенная. |
| Автор: DimW 20.4.2009, 06:58 |
точно так же как и Оракл. а ты уверен что тебе вообще СУБД нужна? Если да то ИМХО это должно быть безплатно и просто, mySQL возможно подойдет. Хранение одной таблицы из трех полей задача ну ни как не MsSQL и Oracle. |
| Автор: Vasay 20.4.2009, 08:40 | ||
Я с этим тоже согласен Просто я думал, что, возможно, из-за каких-нибудь (неизвестных мне) архитектурных особенностей одна база данных будет иметь преимущества над другой в моей задаче... Если нет, то я, пожалуй, остановлю свой выбор на любимой мной 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 |
в сложившейся ситуации о мускуле как о "перспективе" теперь говорить сложно: http://kontrakty.ua/content/view/8633/129/ на самом деле думал что безплатно. |
| Автор: Vasay 22.4.2009, 10:18 | ||||
DimW,
Абсолютно. Он не бесплатен только в случае, если вы хотите включить его код в свое приложение и хотите закрыть его код, т.е. не согласны с лицензией GPL.
Мда, интересная новость. Хотя мускул продукт открытый, убить его не так просто. |
| Автор: DimW 22.4.2009, 10:37 |
достаточно просто прекратить поддержку, но вряд ли... |
| Автор: Poseidon 22.4.2009, 11:11 |
| Vasay, Оракл используй. 150 миллионов - это уже промышленные размеры (кстати, где ты столько набрал?). Тут не имеет значения что табличка простенькая. SELECT в любой БД будет быстрым, а вот вставка и переиндексация... Я бы Oracle выбрал. |
| Автор: Vasay 22.4.2009, 11:13 | ||||
| Блин 24 часа прошло, а индекс еще не сделан :-( (это на моем буке и MySQL) Добавлено @ 11:26 Poseidon, Мне не нужна ни вставка ни переиндексация. База будет просто периодически заменятся на новую. Мне просто нужен очень быстрый селект.
Чуть попозже скажу
Я так подумал - мне дешевле будет иметь кластер с каким-нибудь PostgreSQL чем купить лицензию на оракл. Для того что бы задействовать на полную тот сервер который я сейчас взял, мне надо купить лицензию за 17,500$ Я к этому немного не готов. |
| Автор: Vasay 22.4.2009, 12:40 |
| Poseidon, Эта база - справочник, сохраняющий свою актуальность в течении года. Предоставляется она в виде текстового файла. У меня есть программа которая читает этот файл, дополняет информацией из другой базы и делает SQL дамп. Раз в год могу и на профилактику закрыться для обновления базы. 17,500$ за лицензию на Oracle - для меня не реально! |
| Автор: Akella 24.4.2009, 16:34 | ||
И что за конфиг сервера? |
| Автор: 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*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 | ||
Админ и DBA это два разных человека Не знаю как MySQL (я так понял ты его тестируешь?), но Oracle при наличии более 2-х Гб памяти, лучше использовать 64-х битный. |
| Автор: Bikutoru 29.4.2009, 08:50 | ||
А как ты вставляешь данные? Практика показывает, что самый быстрый способ вставки данных в 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 | ||||
Я в таких случаях сливаю базу в текстовый файл через
После этого создаю новую таблицу с новыми индексами и вставляю туда данные через LOAD DATA INFILE. На сервере таким образом модифицировал таблицу c ~ 100 миллионами записей за 3-4 часа. |