|
|
|
проектирование БД, хранящей историю биржевых сделок
|
|||
|---|---|---|---|
|
#18+
Есть таблица, состоит из 6 полей - дата, время, цена, объем, текст, текст Есть варианты: 1. Хранить сделки по всем контрактам в одной таблице - удобен для доступа и для настройки 2. Хранить сделки по каждому контракту в своей таблице - дольше настраивать экспорт в БД, сложнее обслуживать, сложнее доступ к таблицам (так как нужно передавать имя таблицы), необходимость делать копии хранимых процедур под каждую таблицу Всего контрактов примерно 20, по пяти из них за день в таблицу добавляется по 150 000 записей ежедневно, по десяти по 100 000 записей, и по пяти по 50 000 записей. То есть если хранить в одной таблице то за день она будет увеличиваться на 2 млн записей История будет составлять десятки месяцев. Запросы будут делаться по дате, по времени, по ценам и объемам - например "суммировать все объемы за такие-то дни по такому-то контракту" Подскажите, однозначно ли надо делать свою таблицу для каждого контракта, или можно сделать одну общую? Cпасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 13:54 |
|
||
|
проектирование БД, хранящей историю биржевых сделок
|
|||
|---|---|---|---|
|
#18+
авторВсего контрактов примерно 20...да хоть 1000. Принципы нормализации требуют отдельной таблицы для каждой сущности. у вас сущность = контракт (имхо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 17:39 |
|
||
|
проектирование БД, хранящей историю биржевых сделок
|
|||
|---|---|---|---|
|
#18+
nosov Принципы нормализации требуют отдельной таблицы для каждой сущности. Однако существует такая фича как секционирование (partitioning). Правда обычно это платная опция enterprise редакций, применяемая для облегчения управлением данных или "ручное" секционирование на базе вьюхи Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. естественно вставка напрямую во вьюху невозможна без instead of триггера, зато чтение с фильтром по контрагенту будет из одной таблицы (если оптимизатор догадается) плюс сравнительно легко (не задевая других) можно обрабатывать одного контрагента - очистить, залить, перестроить индекс. Questq2 Подскажите, однозначно ли надо делать свою таблицу для каждого контракта, или можно сделать одну общую?Однозначно тут сказать ничего нельзя, нужно взвешивать достоинства/недостатки каждого метода. У метода - все в одной таблице существенное достоинство - он самый простой и прямой , а рост данных - проблема знакомая. Questq2 сложнее доступ к таблицам (так как нужно передавать имя таблицы)Не нужно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Но еще раз повторю - секционирование - вынужденная мера , в подавляющем большинстве случаев применяют секционирование по дате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 19:32 |
|
||
|
проектирование БД, хранящей историю биржевых сделок
|
|||
|---|---|---|---|
|
#18+
> надо делать свою таблицу для каждого контракта Однозначно. Причем, и архивные, и оперативные таблицы для каждого контракта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 21:41 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36249306&tid=1543036]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 505ms |

| 0 / 0 |
