Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB59.2310
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 27.12.2011, 00:19   #1
Dumpty
Senior Member
 
Аватар для Dumpty
 
Регистрация: 08.05.2008
Сообщений: 808
Бабло: $250950
Отправить сообщение для Dumpty с помощью ICQ
По умолчанию Организация БД

Всем привет.
Есть необходимость хранить в мускул данные, порядка 100 миллионов записей. Эти данные можно разделить по одному признаку.

Что лучше, создать 1 таблицу с индексом, данными, признаком и делать раз в сутки выборку из 100 миллионов по признаку.

Или второй вариант
По признаку создавать таблицы (примерно будет 1500 таблиц) и по таблицам нужным уже распихать данные.

Каждый день заведомо известен признак нужный, и что оптимальнее - делать выборку с where из БД на 100кк записей, или брать всё из нужной таблицы (ненадо листинг таблиц делать, она зараннее известна).

Вот...
Dumpty вне форума  
Старый 27.12.2011, 00:52   #2
tooltip
Вставлю сюда ваша рекламу
 
Регистрация: 18.12.2011
Адрес: 443 порт
Сообщений: 40
Бабло: $6430
Отправить сообщение для tooltip с помощью ICQ
По умолчанию

Не проще ли все это сделать на файлах?
__________________
Последние 30 лет я занимался тем, что люблю и теперь по материальным причинам не могу позволить себе выйти на пенсию.
tooltip вне форума  
Старый 27.12.2011, 00:54   #3
oso
кодер
 
Аватар для oso
 
Регистрация: 21.01.2008
Сообщений: 316
Бабло: $69585
По умолчанию

не знаю, можно ли столько таблиц, но я за вариант с разделением.
если какие то операции помимо выборки раз в сутки, то однозначно разделять. если же просто нужно получить раз в сутки всю таблицу, то может в файлах все хранить?
__________________
php скрипты от $25 Отзывы: 2013-2011, 2010, 2009. acя: 384 846 ноль два шесть
oso вне форума  
Старый 27.12.2011, 02:54   #4
mlu
Senior Member
 
Аватар для mlu
 
Регистрация: 17.02.2011
Сообщений: 153
Бабло: $26940
Отправить сообщение для mlu с помощью ICQ
По умолчанию

Если из таблицы будут часто читать и редко в неё писать, то мускуль вполне переварит таблицы с 100М записей.

У меня база с 3 миллиардами записей суммарно, где-то с десяток крупных таблиц, в каждой из которых более 100М записей, с индексами. Есть таблица с 472М записей, везде myisam, выборки по индексам крайне быстро работают.

Тут главное с умом подойти к делу :) Если вливать в таблицу 472М записей и повесить на каждое поле по индексу, то можно и не дождаться :)

Пример такой базы во второй ссылке из подписи.
mlu вне форума  
Старый 27.12.2011, 08:40   #5
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,382
Бабло: $470735
По умолчанию

1.
100М - это МАЛО
у меня на домашнем слабом компе такая таблица обрабатывается со скоростью 100000 операций в СЕКУНДУ, причем операции атомарные с табличными локами и тд. Когда пробовал использовать редис скорость возрастала до 300000 операций в СЕКУНДУ. Правда у меня все это происходит в оперативной памяти и по алгоритму map-reduce, но в итоге все равно все сваливается на диск. Без этих моих заморочек делать select из 100М можно вполне быстро, ну может 1000 раз в секунду. Это все при условии наличия индекса в раме.

2.
один признак? если можно организовать на файлах или на key-value БД - делай, будет еще эффективней.

3.
1500 таблиц - говнокод
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 27.12.2011, 09:52   #6
seobatman
Юниор
 
Аватар для seobatman
 
Регистрация: 16.11.2011
Адрес: Gotham
Сообщений: 7
Бабло: $1870
По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
1.
100М - это МАЛО
у меня на домашнем слабом компе такая таблица обрабатывается со скоростью 100000 операций в СЕКУНДУ, причем операции атомарные с табличными локами и тд. Когда пробовал использовать редис скорость возрастала до 300000 операций в СЕКУНДУ. Правда у меня все это происходит в оперативной памяти и по алгоритму map-reduce, но в итоге все равно все сваливается на диск. Без этих моих заморочек делать select из 100М можно вполне быстро, ну может 1000 раз в секунду. Это все при условии наличия индекса в раме.

2.
один признак? если можно организовать на файлах или на key-value БД - делай, будет еще эффективней.

3.
1500 таблиц - говнокод
бро а расскажи подробней про map-reduce, очень интересно. на нескольких машинах запускаешь ?
seobatman вне форума  
Старый 27.12.2011, 11:19   #7
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,382
Бабло: $470735
По умолчанию

Цитата:
Сообщение от seobatman Посмотреть сообщение
бро а расскажи подробней про map-reduce, очень интересно. на нескольких машинах запускаешь ?
сам MapReduce - это вроде запатентованная гугловская технология, которая дала им резкий толчок в развитии, позволили стать тем монстром, которые они сейчас. МепРедьюс предназначен для обработки данных, т.е. это обычно активное использование процессора и памяти.
Смысл технологии заключается в распараллеливании выполнения одной задачи. В таких системах делается мастер нода, или главный управляющий алгоритм, на вход которого поступают данные для обработки. Но эта мастер нода сама не выполняет обработку, а только управляет всем процессом, а именно - разделяет входные данные на куски и передает эти куски воркерам - рабочие ноды. Это называется mapping. Т.е. главный(центральный) алгоритм распараллеливает данные и делегирует их обработку дальше в другие ноды. Воркеры обычно все одинаковые и умеют только обрабатывать данные и возвращать результат. После того как воркер вернул результат обработки(а это может происходить асинхронно), мастер нода решает куда этот результат деть или что с ним делать. Т.е. мастер нода обрабатывает результаты всех воркеров - это называется Reduce.

Конкретно у гугла и в большом хайлоаде ноды - это отдельные компы/серверы. Допустим один центральный сервер и 100 воркеров. Центральный сервер в начале работы раздает задания воркера и дальше сидит-ждет результатов для операции reduce. Ну вообще говоря, reduce тоже могут делать не одна центральная нода, а несколько.

Самих реализаций этого алгоритма несколько. Ну главная - это у гугла. Также есть известный фреймворк Apache под названием Hadoop, который позволяет прозрачно организовать тукую распределенную вычислительную систему.

Я себе сам случайно реализовал подобие такого алгоритма, но на пхп. Поигравшись, понял, что надо переходить на апач-технологии, на java.
Пробовал делать обработку данных на нескольких VPS. Смысл в том, что в моей обработке очень нужен диск, а на VPS диск общий с соседствующими VPS + контролировать диск со стороны гипервизора сложно или вообще они это не делают. Ну короче говоря, я садился на шею у vps-соседей, наверно у них сайты лежали Если бы я взял отдельный сервер, очередь диск на нем в разы быстрее забилась бы. Ну и мне больше было интересно протестить, как все работает на сетке, а впс - это дешево.

Ну и можно использовать этот же принцип на одном сервере. Например в mysql. Я использовал memory таблицы, а у них локи на всю таблицу. А мне надо было читать-писать(одна двойная операция) со скоростями более 10к в секунду. Вот после распараллеливания обработки на несколько таблиц в пиках доходило до 120к операций в секунду. Но минус был(и есть) в reduce: конкретно на этой задаче он у меня долгий.

Ну и вообще надо смотреть конкретную задачу и думать, нужно оно там или нет. Кстати, MR распространен в функциональном программировании.

пример использовани MR в сео-инструментарии: http://habrahabr.ru/blogs/algorithm/103490/
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 28.12.2011, 09:16   #8
seobatman
Юниор
 
Аватар для seobatman
 
Регистрация: 16.11.2011
Адрес: Gotham
Сообщений: 7
Бабло: $1870
По умолчанию

пасиба, интересна очень! перечитываю твои посты) крута..
могу только добавить handlersocket + mysql - 750к запросов в секунду может дать, если верить автору. исходя из changelog'а мускуловского, они добавляют эту поддержку и она будет официальная.
percona уже включает в себя handlersocket сразу.
суть в том чтобы делать запросы прямо к системе хранения, обходя мускуловкий парсер.
http://habrahabr.ru/search/?q=handle...get_type=posts
но сам пока не пробовал.
seobatman вне форума  
Старый 28.12.2011, 19:27   #9
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,382
Бабло: $470735
По умолчанию

а вот неплохой вводный видео-обзор про MR и Apache Hadoop :
http://habrahabr.ru/blogs/development/117359/

как раз достаточно, чтобы понять зачем оно все нужно.
там и про колоночные БД краем прошлись
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума