|
Перепроектировать ли БД
|
|||
---|---|---|---|
#18+
Добрый день! Спроектировал БД, которая хранит исторические данные финансовых рынков. для каждого нового финансового (сейчас их около 70) созданы 4 таблицы: имя_инструмента_ week , имя_инструмента_ day , имя_инструмента_ hr1 , имя_инструмента_ 10min , имя_инструмента_ 1min Код: sql 1. 2.
таблицы 10min и 1min пока не используются средний размер одной таблицы hr1 в среднем для каждого инструмента 18000 записей. сразу поясню изначально решено на каждые пару инструмент/временной интервал сделать отдельные таблицы (а не хранить все в одной таблице), потому как в конечном результате будут использоваться и 1min, т.е. для каждого инструмента уже будет по 1млн записей, т.е. в одной таблице это было бы 70млн записей. Я опасался, что будет тормозить... Не тут-то было... с проблемами подтормаживания и неудобств я столкнулся раньше :) В конечных отчетах выводимые данные - это расчетные цифры, которые в основном вычисляются по одинаковому принципу: для каждой выводимой записи вычисляется значение на основании предыдущих N записей (максимум за последние 90дней, среднее за последние 90 записей итд). Конечный SELECT в одном из отчетов для N инструментов выглядит во-первых очень громоздко: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Во-вторых, этот отчет содержит ТОЛЬКО ОДИН расчетный параметр Prev90DaysHigh. Строится он вполне приемлемо по времени, хотя парсить его сложно :) Если же я добавлю еще пару расчетных параметров, т.е. еще 2*N вложенных селектов, ждать становится менее приятно. А искать ошибку в select'e не возможно (хотя всегда на время отлаживания можно сделать N=2). Но меня, конечно, беспокоит производительность на этом этапе. Такая тормозяка, а я минимально использую только часовой интервал... Итак теперь вопросы :) Во-первых, очень бы хотелось, чтобы Вы, профессионалы этого дела, своим профессиональным взглядом сказали насколько все запущенно/через одно место сделано :). Если все совсем плохо, посоветуйте, как правильнее перепроектировать БД. Один из вариантов решения, который мне пришел в голову это сделать ТРИГГЕРЫ, что не сложно. Если только Вы не подскажете более правильное решение. Во-вторых, для удобства работы программы и особенно дальнейшего использования было бы удобно написать функции, которые в качестве результата выдают расчет конкретного параметра для конкретной записи (тобишь один SELECT). Тут есть вопрос, что быстрее: выполнять один раздутый SELECT выше или убрать из него подселекты и выполнять их походу построения отчета. Или другими словами оптимизирует ли SQLite этот раздутый SELECT. В-третьих, учитывая что в конечной перспективе будут использоваться таблицы 1min, подумываю перейти на более серьезные БД. MSSQL же хватит для этих целей? :) Но прежде чем переходить, хотелось бы понимать, что все сделано не через ж. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 14:04 |
|
|
start [/forum/topic.php?fid=54&msg=38052139&tid=2008957]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 382ms |
0 / 0 |