Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> БД для таблицы с 300 млн. записей и более, Вопрос новичка 
V
    Опции темы
AJetman
Дата 17.8.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 16.8.2009

Репутация: нет
Всего: 2



Таблица состоит из:
- 1 поле первичный ключ с автоинкрементом
- 5 полей VARCHAR(255) с индексами для быстрой выборки
- 1 поле TEXT (в среднем длина текста 1500 байт)

Сейчас в таблице уже 8 млн записей, через месяц будет 30 млн, а за год до 300 млн, через три 1 млрд. Используется PostgreSQL 8.3, работа с БД ведется из приложений на Java.

Сервер Phenom X4 c 4GB RAM и одним жестким диском на 500GB. Платить деньги за коммерческие БД смысла не вижу(если есть - поясните).

Какие потенциально могут быть у меня проблемы c БД? Сейчас, например, подсчет количества записей в таблице уже ведется с помощью триггеров, т.к. запрос SELECT COUNT(*) FROM table занимает много времени. Фильтр по VARCHAR полям тоже уже не совсем быстрый.

Нужно улучшать сервер? Ставить RAID? Может мне подойдет система типа Apache Hadoop? Кроме этой таблицы, в БД будут таблицы с максимум 10 тыс. записей.


PM   Вверх
jsa
Дата 18.8.2009, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата(AJetman @  17.8.2009,  19:53 Найти цитируемый пост)
Какие потенциально могут быть у меня проблемы c БД?

при большом наличии однородных данных, наличие индексов не спасет, пример - в таблице 1млн записей,  и только несколько процентов записей несут отличительный информационных характер - вот здесь индексы могут еще и снизить быстродействие
Цитата(AJetman @  17.8.2009,  19:53 Найти цитируемый пост)
Фильтр по VARCHAR полям тоже уже не совсем быстрый

если требуется поиск, то можно попробовать посмотреть в сторону поисковых систем, например sphinx - бесплатная система, поддерживает постгрес

Добавлено через 4 минуты и 56 секунд
sphinx реально может ускорить поиск в разы, правда придется часто перестраивать индексы(не путать с индексами в БД), что может являться продолжительной по времени задачей при таком объеме


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
jsa
Дата 18.8.2009, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



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

2 - хранить только актуальные данные - не представляю практическую ценность данных 3-х летней давности количеством 1 млрд - все что не нужно - бекапить


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
Ипатьев
Дата 18.8.2009, 07:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: нет
Всего: 37



Скорее всего, потребуется перенастройка сервера/серверной машины. 
Значение для производительности базы имеет не размер базы, а размер индексов.
Из этого и следует исходить.
А вообще, не следует избегать участия в проекте специалистов. DBA - отдельная и сложная профессия. Когда проектируют новый дом, то архитектор не спрашивает на форуме, какие трубы ставить и как их размещать. Он нанимает специалиста по инженерным коммуникациям. Иначе есть большой шанс, что жителей зальет чем-нибудь не очень приятно пахнущим. 
PM MAIL   Вверх
DimW
Дата 18.8.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(jsa @  18.8.2009,  06:55 Найти цитируемый пост)
и только несколько процентов записей несут отличительный информационных характер - вот здесь индексы могут еще и снизить быстродействие

спорное утвеждение, для таких случаев существуют bitmap index, для 1 млн. о котором вы горорите как раз подойдет.

Цитата(jsa @  18.8.2009,  07:11 Найти цитируемый пост)
не представляю практическую ценность данных 3-х летней давности количеством 1 млрд

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

AJetman, покапайте так же в сторону партиционирования таблиц. 
PM MAIL ICQ   Вверх
jsa
Дата 18.8.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата(DimW @  18.8.2009,  14:47 Найти цитируемый пост)
для 1 млн. о котором вы горорите как раз подойдет.

это был просто пример


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
DimW
Дата 18.8.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(jsa @  18.8.2009,  10:03 Найти цитируемый пост)
это был просто пример

я понимаю, но ТС может расценить ваш ответ как руководство к действию, и сделать неправильные выводы. думаю для него не будет лишней информацией что помимо b-tree индыксов, есть еще bitmap и др. 
PM MAIL ICQ   Вверх
jsa
Дата 19.8.2009, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата(DimW @  18.8.2009,  15:49 Найти цитируемый пост)
думаю для него не будет лишней информацией что помимо b-tree индыксов, есть еще bitmap и др.

конечно


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
AJetman
Дата 22.12.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 16.8.2009

Репутация: нет
Всего: 2



Всем спасибо за ответы. Простите, что забыл про эту тему. Проблему свою уже решил.
PM   Вверх
gelo86
Дата 27.12.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 388
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



А как решил ?
PM MAIL   Вверх
AJetman
Дата 27.12.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 16.8.2009

Репутация: нет
Всего: 2



Цитата(gelo86 @ 27.12.2009,  13:23)
А как решил ?

Разделил на две таблицы. 

Первая - информационная с минимальным размером строки, т.е. все VARCHAR'ы(см. первое сообщение) были заменены на TINYINT (да да, использую MySQL). Таблица занимает минимум места и поэтому выборка производится максимально быстро.

Вторая - хранилище исходных данных (это было поле TEXT). Когда необходимо достать исходные данные, то просто находим список ID из первой таблицы, загоняя их в MEMORY таблицу, и по списку выбираем информацию из второй. 

Все работает довольно быстро и пока такая схема устраивает (данных уже на 100 млн записей).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

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

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.