|
|
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
Господа, день добрый. Очень нужен толковый совет по проектированию БД.., а то у меня уже 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 Гб. Подскажите, пожалуйста, что из этого будет быстрее работать т.к. скорость (ну, и целостность данных ;) )- ключевое требование к этой системе. Про оптимизацию запросов, индексации и пр. я в курсе - мне сейчас нужно решить именно вопрос проектирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 22:02 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
))) 1 073 741 824 полями --- записями? решение 2 очистка устаревших по крону (ночью) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 22:08 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
авторрешение 2 очистка устаревших по крону (ночью) Данные должны быть актуальны в каждый момент времени. Т.е. "лишние" или те, которы стали не актуальны будут сразу стираться (или удаляться значения свойств в строке). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 22:20 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
fafnir_08Существует 1 073 741 824 возможных вариантов ключейНасколько фундаментально это число? Есть вероятность, что в процессе эксплуатации системы оно изменится? Есть мысль, что, возможно, плоский файл окажется эффективнее, чем СУБД. fafnir_08Плюс: Вес таблицы в порядке всего 5-10 Гб.В отличие от 100 ГБ, этот размер вполне возможно уместить в современной оперативной памяти, если нужна высокая производительность. Впрочем, вы не описали ни запросы, ни требований к их времени выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 22:21 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
miksoftНасколько фундаментально это число? Есть вероятность, что в процессе эксплуатации системы оно изменится? Нет - оно на всю жизнь системы. miksoftЕсть мысль, что, возможно, плоский файл окажется эффективнее, чем СУБД. В этом случае, я так думаю, становится сложнее репликация при кластеризации на несколько серверов. miksoftВпрочем, вы не описали ни запросы, ни требований к их времени выполнения. В основном - запросы SELECT от 1 до 1024 записей за один запрос, скорость - чем быстрее тем лучше, но не дольше 0,5 - 1 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 22:27 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
авторВ основном - запросы SELECT от 1 до 1024 записей за один запрос, скорость - чем быстрее тем лучше, но не дольше 0,5 - 1 сек. Прошу прощения - 0,05 - 0,1 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 22:29 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
fafnir_08miksoftЕсть мысль, что, возможно, плоский файл окажется эффективнее, чем СУБД.В этом случае, я так думаю, становится сложнее репликация при кластеризации на несколько серверов.Ну пока из приведенных данных никак не следует необходимость в таковой кластеризации. К ней, имхо, лучше не прибегать до тех пор, пока не исчерпаны варианты одиночной БД. fafnir_08авторВ основном - запросы SELECT от 1 до 1024 записей за один запрос, скорость - чем быстрее тем лучше, но не дольше 0,5 - 1 сек.Прошу прощения - 0,05 - 0,1 сек.Если это будут просто SELECT-ы по индексу, то это не выглядит чем-то особенным, даже если не удастся закэшировать все данные и индексы в оперативке. Насколько долго должны храниться данные? Если недолго, то имеет смысл подумать про in-memory СУБД. При экономном проектировании возможно целиком разместиться в оперативке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 00:33 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
о чем топик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 12:20 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
авторМинус: Частые вставки строк при SELECTах. а почему это минус? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 13:46 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
miksoftЕсли недолго, то имеет смысл подумать про in-memory СУБД. Хранение постоянное, как и использование таблицы - она будет ведущей в базе. Спасибо за совет насчет in-memory СУБД, покопаюсь в мануалах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 13:05 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторМинус: Частые вставки строк при SELECTах. а почему это минус? Ключ у меня не автоинкриментный. Т.е. придется использовать INSERT INTO .... ON DUPLICATE KEY UPDATE ... С моей точки зрения, это вызовет очереди из за блокировки строк при INSERT и увеличит время запросов (UPDATE все-таки малость быстрее). Поправьте меня, если ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 15:02 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
MasterZivо чем топик? Если в двух словах - о моих тупняках при проектировании БД :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 15:15 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
miksoftЕсли недолго, то имеет смысл подумать про in-memory СУБД. При экономном проектировании возможно целиком разместиться в оперативке. Подойдет ли для этого вот такая штука - The MEMORY (HEAP) Storage Engine ? https://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html Естественно, с репликацией, в свою очередь, данных в нормальную таблицу на SSD для повышения отказоустойчивости. Отключение питания в нормальных датацентрах ОЧЕНЬ большая редкость, но все-же бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 17:24 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
fafnir_08Подойдет ли для этого вот такая штука - The MEMORY (HEAP) Storage Engine ?Если найдете достаточно оперативки, то подойдет. Правда, я понятия не имею, можно ли реплицировать такую таблицу встроенным механизмом репликации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 17:28 |
|
||
|
Проектирование таблицы на 100 Гб или INSERT?
|
|||
|---|---|---|---|
|
#18+
Какая-то трава нехорошая... Набор свойств - большой, нет? Можно или нельзя держать в той же таблице? Ключ по сути до 1 млрд нужен. Что такое с этими 10 колонками int, что из них получается всего 1 млрд комбинаций? 40 байт (если я правильно помню про 4 байта), но уникальная комбинация отлично уместится в 4 байта. Как-то надо на этом сыграть. Возможно, через хэш (может быть выбрана не одна запись, но в маленькой выборке легко найти нужное детальным сравнением 10 колонок). Суррогатный ПК на таблицу со свойствами, другая таблица с теми же первичными ключами и пресловутыми 10 int по которым искаться будет прямо-таки мгновенно. С признаком неактуальности. Чистить по расписанию и т.п., да и то если надо (можно просто активировать ключ заново). integer 4 байта, млрд вариантов будет под 60ГБ, это много но живет их 58млн, это 3,5 гб, можно держать в памяти индекс а если хранить хэш и ссылку на ПК таблиц с 10 интами и со свойствами - то полгигабайта, копейки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 18:00 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=113&tid=1832227]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
18ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 286ms |

| 0 / 0 |
