powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проектирование таблицы на 100 Гб или INSERT?
15 сообщений из 15, страница 1 из 1
Проектирование таблицы на 100 Гб или INSERT?
    #39155102
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, день добрый. Очень нужен толковый совет по проектированию БД.., а то у меня уже mozg.dll кипит…

Все вроде ничего, но вылез вопрос по одной из таблиц.

Среда:
Проектирую БД под mysql (база для веб-ресурса), при необходимости c дальнейшим переходом на PostgreSQL (Oracle шибко дороговатый выходит).

Использую партицирование на 1024 партиции. Репликация и горизонтальный шардинг тоже планируется, если СУБД не будет справляться с задачей так, но это в будущем.

Таблица InnoDB. Содержит небольшое количество (7-10) колонок типа INT. Ключ составной.

Задача:

Существует 1 073 741 824 возможных вариантов ключей, которые могут (будут) использоваться, к которым нужно хранить набор свойств.
Из них (свойств), заполнено в один момент времени примерно 52 428 800 строк.
Обновления и изъятие данных будет происходить постоянно. SELECTов будет гораздо больше, чем UPDATEов. Более точно сказать на этом этапе сложно.


Решение 1:

Создать таблицу с готовыми 1 073 741 824 полями, и работать с таблицей оперируя только UPDATE, SELECT, COUNT(..). Работа будет происходить с отдельными строками (массовых обработок пока не предусматривается).

Минус: Довольно “тяжелая” таблица, а если еще добавить индексацию - может выйти порядка 100 Гб.

Плюс: Индексы и количество строк не меняются (не исп. INSERT, DELETE вообще).

Решение 2:



Создать таблицу с пустым содержимым, заполнять данные по-необходимости INSERTом и удаляя уже устаревшие.

Минус: Частые вставки строк при SELECTах.
Плюс: Вес таблицы в порядке всего 5-10 Гб.




Подскажите, пожалуйста, что из этого будет быстрее работать т.к. скорость (ну, и целостность данных ;) )- ключевое требование к этой системе. Про оптимизацию запросов, индексации и пр. я в курсе - мне сейчас нужно решить именно вопрос проектирования.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155104
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
))) 1 073 741 824 полями --- записями?

решение 2 очистка устаревших по крону (ночью)
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155110
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторрешение 2 очистка устаревших по крону (ночью)

Данные должны быть актуальны в каждый момент времени. Т.е. "лишние" или те, которы стали не актуальны будут сразу стираться (или удаляться значения свойств в строке).
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155112
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fafnir_08Существует 1 073 741 824 возможных вариантов ключейНасколько фундаментально это число? Есть вероятность, что в процессе эксплуатации системы оно изменится?
Есть мысль, что, возможно, плоский файл окажется эффективнее, чем СУБД.
fafnir_08Плюс: Вес таблицы в порядке всего 5-10 Гб.В отличие от 100 ГБ, этот размер вполне возможно уместить в современной оперативной памяти, если нужна высокая производительность.
Впрочем, вы не описали ни запросы, ни требований к их времени выполнения.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155116
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНасколько фундаментально это число? Есть вероятность, что в процессе эксплуатации системы оно изменится?

Нет - оно на всю жизнь системы.

miksoftЕсть мысль, что, возможно, плоский файл окажется эффективнее, чем СУБД.

В этом случае, я так думаю, становится сложнее репликация при кластеризации на несколько серверов.

miksoftВпрочем, вы не описали ни запросы, ни требований к их времени выполнения.

В основном - запросы SELECT от 1 до 1024 записей за один запрос, скорость - чем быстрее тем лучше, но не дольше 0,5 - 1 сек.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155118
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВ основном - запросы SELECT от 1 до 1024 записей за один запрос, скорость - чем быстрее тем лучше, но не дольше 0,5 - 1 сек.

Прошу прощения - 0,05 - 0,1 сек.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155158
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fafnir_08miksoftЕсть мысль, что, возможно, плоский файл окажется эффективнее, чем СУБД.В этом случае, я так думаю, становится сложнее репликация при кластеризации на несколько серверов.Ну пока из приведенных данных никак не следует необходимость в таковой кластеризации.
К ней, имхо, лучше не прибегать до тех пор, пока не исчерпаны варианты одиночной БД.


fafnir_08авторВ основном - запросы SELECT от 1 до 1024 записей за один запрос, скорость - чем быстрее тем лучше, но не дольше 0,5 - 1 сек.Прошу прощения - 0,05 - 0,1 сек.Если это будут просто SELECT-ы по индексу, то это не выглядит чем-то особенным, даже если не удастся закэшировать все данные и индексы в оперативке.

Насколько долго должны храниться данные?
Если недолго, то имеет смысл подумать про in-memory СУБД. При экономном проектировании возможно целиком разместиться в оперативке.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155399
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о чем топик?
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39155517
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМинус: Частые вставки строк при SELECTах.
а почему это минус?
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39156469
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftЕсли недолго, то имеет смысл подумать про in-memory СУБД.

Хранение постоянное, как и использование таблицы - она будет ведущей в базе. Спасибо за совет насчет in-memory СУБД, покопаюсь в мануалах.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39156608
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowавторМинус: Частые вставки строк при SELECTах.
а почему это минус?

Ключ у меня не автоинкриментный. Т.е. придется использовать INSERT INTO .... ON DUPLICATE KEY UPDATE ...
С моей точки зрения, это вызовет очереди из за блокировки строк при INSERT и увеличит время запросов (UPDATE все-таки малость быстрее).

Поправьте меня, если ошибаюсь.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39156629
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivо чем топик?

Если в двух словах - о моих тупняках при проектировании БД :)
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39156795
fafnir_08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftЕсли недолго, то имеет смысл подумать про in-memory СУБД. При экономном проектировании возможно целиком разместиться в оперативке.

Подойдет ли для этого вот такая штука - The MEMORY (HEAP) Storage Engine ?
https://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

Естественно, с репликацией, в свою очередь, данных в нормальную таблицу на SSD для повышения отказоустойчивости. Отключение питания в нормальных датацентрах ОЧЕНЬ большая редкость, но все-же бывает.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39156802
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fafnir_08Подойдет ли для этого вот такая штука - The MEMORY (HEAP) Storage Engine ?Если найдете достаточно оперативки, то подойдет.
Правда, я понятия не имею, можно ли реплицировать такую таблицу встроенным механизмом репликации.
...
Рейтинг: 0 / 0
Проектирование таблицы на 100 Гб или INSERT?
    #39156829
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то трава нехорошая...

Набор свойств - большой, нет? Можно или нельзя держать в той же таблице?

Ключ по сути до 1 млрд нужен. Что такое с этими 10 колонками int, что из них получается всего 1 млрд комбинаций? 40 байт (если я правильно помню про 4 байта), но уникальная комбинация отлично уместится в 4 байта. Как-то надо на этом сыграть. Возможно, через хэш (может быть выбрана не одна запись, но в маленькой выборке легко найти нужное детальным сравнением 10 колонок).

Суррогатный ПК на таблицу со свойствами, другая таблица с теми же первичными ключами и пресловутыми 10 int по которым искаться будет прямо-таки мгновенно. С признаком неактуальности. Чистить по расписанию и т.п., да и то если надо (можно просто активировать ключ заново).

integer 4 байта, млрд вариантов будет под 60ГБ, это много

но живет их 58млн, это 3,5 гб, можно держать в памяти индекс

а если хранить хэш и ссылку на ПК таблиц с 10 интами и со свойствами - то полгигабайта, копейки
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проектирование таблицы на 100 Гб или INSERT?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]