|
|
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValЭто сложный запрос: select count(*) from Users where total_credit >100 order by total_credit desc ? Я проверил в SQL-studio: запрос длится 2-3 секунды(если юзеров >=300 тыс.) Бред какой-то. Ведь этот запрос вернет одну строку, с указанием количества юзеров, у которых total_credit >100. Зачем тогда order by, да еще desc? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 18:05 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, интересно, что показывает эксплейн этого запроса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 18:20 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
АнатоЛойищи узкое место в своём процессе: из каких действий он состоит Сейчас речь об SQL сервере, а не о клиентской программе. Вот сижу в Menegement Studio и набиваю: select top(10) * from Users where total_credit>100 order by total_credit desc go И всё замечательно, пока размер базы небольшой. А когда размер 40-50 гигабайт - задержка 2-3-5 секунд. :( Никаких процессов больше нет. В каком процессе искать узкое место ? Попробую поизменять индексы. Опыт в составлении индексов у меня небольшой( мягко говоря). Хотя я всё равно думаю, что тормозит потому, что размер базы большой. p.s. Переделываю под хранение сжатых xml. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 18:25 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 Cane Cat Fisher : Cane Cat FisherБред какой-то. Ведь этот запрос вернет одну строку Ну ошибся я в качестве примера.(count тут не причём). ***** Напугали меня. Понаделал кучу индексов на таблицы... начались блокировки при insert-ах. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 18:29 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValselect top(10) * from Users where total_credit>100 order by total_credit desc go От БД не нужно требовать всегда быстро выдавать результат на любой запрос. Проверяй на скорость выполнения те запросы, которые будет выполнять твоё приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 18:37 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValНапугали меня. Понаделал кучу индексов на таблицы... начались блокировки при insert-ах. :( Потому что индексы надо создавать с умом, а не от балды. EXPLAIN тут уже упомянули. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 18:50 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 АнатоЛой : АнатоЛойПроверяй на скорость выполнения те запросы, которые будет выполнять твоё приложение. - так оно и будет выполнять именно такой запрос. 2 Dimitry Sibiryakov : Ну если Вы разбираетесь, подскажите какие индексы создать для Users ? (таблицы Команд, Стран - такие же. Там я сам.. без ума, но по образу и подобию, так сказать..) Код: 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 19:26 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/08/2012 07:25 PM, SerVal wrote: > select top(10) * from Users where total_credit>100 order by total_credit desc > go Ты хочешь поговорить о производительности этого запроса ? Тебе это нужно ? > > И всё замечательно, пока размер базы небольшой. А когда размер 40-50 гигабайт - > задержка 2-3-5 секунд. :( А индекс на total_credit есть? А записей всего и с total_credit>100 сколько ? > Хотя я всё равно думаю, что тормозит потому, что размер базы большой. Т.е. по-твоему только с маленькими базами данных можно работать, да? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 19:46 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValподскажите какие индексы создать для Users ? Это зависит от данных в этой таблице и запросов к ней. Какой процент записей в ней имеет total_credit>100? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 19:46 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/08/2012 08:26 PM, SerVal wrote: > 2 *Dimitry Sibiryakov*: > Ну если Вы разбираетесь, подскажите какие индексы создать для Users ? А это ещё немного зависит от того, какие запросы ты будешь выполнять, не правда ли ? > (таблицы Команд, Стран - такие же. Там я сам.. без ума, но по образу и подобию, > так сказать..) Ага, такие же. В них поля и в полях данные ... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 19:48 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
MasterZivТы хочешь поговорить о производительности этого запроса ? Тебе это нужно ? Да. Хочется, чтобы этот запрос выполнялся не 3-5 секунд, а побыстрее. Но это можно и потом, когда загрузку/обновление удастся сделать побыстрее. ******* Ребятки, я уже написал, что вопрос о производительности клиентского приложения пока не актуален. Сейчас бы просто уменьшить время загрузки/обновления статистики и разрастание таблиц из-за графиков. Графики XML стал хранить сжатыми, как varchar(1000)/ Но всё равно, производительность не радует, потому что обновлять надо каждый день. Пока запустил обновление, чтобы посмотреть - дала-ли что-нибудь компрессия графиков. Download stats started 08 Aug 2012 15:57:39. Einstein@Home: началась загрузка данных. Einstein@Home: запущено 17 нитей добавления 324562 участников в таблицу Users Einstein@Home: запущено 67 нитей добавления 2668084 компьютеров в таблицу Hosts Einstein@Home: запущено 3 нитей добавления 10358 команд в таблицу Teams Einstein@Home: ожидаем обновление участников, команд и компьютеров.... Сижу жду окончания процесса. Потом помотрю на время обновления и размер базы. p.s. Убрал пока все индексы кроме как на PRIMARY KEY. Блокировки пропали. (Ура !) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 20:30 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValХочется, чтобы этот запрос выполнялся не 3-5 секунд, а побыстрее. Тогда создай DESCENDING index на total_credit. SerValСейчас бы просто уменьшить время загрузки/обновления статистики и разрастание таблиц из-за графиков. Тогда как уже и сказали: выкинь к ЧМ этот XML и храни данные в реляционных таблицах, как все нормальные люди. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 20:38 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/08/2012 09:38 PM, Dimitry Sibiryakov wrote: > SerVal > Хочется, чтобы этот запрос выполнялся не 3-5 секунд, а побыстрее. > > > Тогда создай *DESCENDING* index на total_credit. Это всё равно. Индексы могут сканироваться в любую сторону. > Тогда как уже и сказали: выкинь к ЧМ этот XML и храни данные в реляционных > таблицах, как > все нормальные люди. Да это всё равно как хранить. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 23:08 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValВот сижу в Menegement Studio и набиваю: select top(10) * from Users where total_credit>100 order by total_credit desc go И всё замечательно, пока размер базы небольшой. А когда размер 40-50 гигабайт - задержка 2-3-5 секунд. :( а у этого запроса есть план выполнения, или как оно там называется в mssql-e? нечто, показывающее используемые индексы, время и прочее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 23:09 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 Dimitry Sibiryakov : То есть Вы предлагаете создать дополнительную таблицу, где на каждого участника будет 17*60= 1020 записей ? (17 графиков по 60 значений в каждом). Итого, для 300 тыс. участников в таблице будет 300 тыс.* 1020 = 306 000 000 (306 миллионов записей) Я правильно понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 23:13 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 S.G.: а у этого запроса есть план выполнения, или как оно там называется в mssql-e? Конкретно этот запрос имеет мало значения. Он слишком прост. Меня интересует время выборки для таких простыз запросов. Если такой примитив даёт задержку в 2-3 секунды, то рассматривать что-либо сложнее я не вижу смысла. Вот, например stored proc, выводящая участников на экран по 100 штук: Код: 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. 34. 35. 36. 37. 38. 39. 40. 41. Выполняется быстро, поскольку постраничный вывод для листания в GridView. Но я ещё раз говорю, это пока рано рассматривать и анализировать. ***** Завершилась загрузка пустой базы(console log): >ProjectStatsDownloader.exe Download stats started 08 Aug 2012 15:57:39. Einstein@Home: началась загрузка данных. Einstein@Home: запущено 17 нитей добавления 324562 участников в таблицу Users Einstein@Home: запущено 67 нитей добавления 2668084 компьютеров в таблицу Hosts Einstein@Home: запущено 3 нитей добавления 10358 команд в таблицу Teams Einstein@Home: ожидаем обновление участников, команд и компьютеров. Einstein@Home: обновление команд завершено за 21 минут 54 секунд. Einstein@Home: обновление участников завершено за 48 минут 5 секунд. Einstein@Home: обновление компьютеров завершено за 1 часов 25 минут 36 секунд. Einstein@Home: вычисление рангов команд и число участников в них завершено за 22 секунд. Einstein@Home: вычисление рангов участников завершено за 9 минут 16 секунд. Einstein@Home: вычисление рангов участников в команде и в стране завершено за 31 минут 39 секунд. Einstein@Home: вычисление рангов компьютеров завершено за 1 часов 14 минут 28 секунд. Einstein@Home: Вычисление рангов стран завершено за 3 минут 31 секунд. Einstein@Home: таблица Project обновлена. Einstein@Home: Обновление завершено за 3 часов 25 минут 37 секунд. Загрузка и обновление проектов завершена. Продолжительность: 3 часов 25 минут 37 секунд. > Размер базы из-за компрессии графиков уменьшился с 48 до 24 GB MB. Уже на много лучше. Однако продолжительность в 3 часов 25 минут 37 секунд. .. как-то не очень. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 23:37 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValИтого, для 300 тыс. участников в таблице будет 300 тыс.* 1020 = 306 000 000 (306 миллионов записей) Я правильно понял ? Да. Сейчас у тебя те же миллионы записей запиханы в формат, который делает добавление и удаление значений очень медленным. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 23:44 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
MasterZivИндексы могут сканироваться в любую сторону. Тогда откуда 3 секунды на индексную выборку десяти записей? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 23:45 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
> Конкретно этот запрос имеет мало значения. Он слишком прост. > Меня интересует время выборки для таких простыз запросов. Понятия "такие простые запросы" не существует. Каждый запрос конкретен, выполняется на конкретных данных и обладает конкретной производительностью, обобщать тут не имеет никакого смысла. > Если такой примитив даёт задержку в 2-3 секунды, то рассматривать что-либо > сложнее я не вижу смысла. А с чего ты взял, что это примитивный запрос ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 01:10 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/08/2012 08:26 PM, SerVal wrote: > CREATE TABLE dbo.Users( > -- графики -- > [total_credit_xml] [varchar](1000) NULL, > [expavg_credit_xml] [varchar](1000) NULL, > [credit_day_xml] [varchar](1000) NULL, > [credit_week_xml] [varchar](1000) NULL, > [credit_month_xml] [varchar](1000) NULL, > [project_rank_xml] [varchar](1000) NULL, > [project_rank_day_xml] [varchar](1000) NULL, > [project_rank_week_xml] [varchar](1000) NULL, > [project_rank_month_xml] [varchar](1000) NULL, > [team_rank_xml] [varchar](1000) NULL, > [team_rank_day_xml] [varchar](1000) NULL, > [team_rank_week_xml] [varchar](1000) NULL, > [team_rank_month_xml] [varchar](1000) NULL, > [country_rank_xml] [varchar](1000) NULL, > [country_rank_day_xml] [varchar](1000) NULL, > [country_rank_week_xml] [varchar](1000) NULL, > [country_rank_month_xml] [varchar](1000) NULL > ) Кстати, нарушение 1НФ хоть поздно, но detected. Лучше поздно, чем никогда. Так что выноси это всё в отдельную дочернюю таблицу. О трёх полях. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 01:14 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 12:45 AM, Dimitry Sibiryakov wrote: > Тогда откуда 3 секунды на индексную выборку десяти записей? Почему обязательно на индексную ? Я как-то не просёк, что автор уже успел создать индекс нужный. Или сообщить, что индекс уже был создан ранее. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 01:16 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 Dimitry Sibiryakov : Dimitry SibiryakovДа. Сейчас у тебя те же миллионы записей запиханы в формат, который делает добавление и удаление значений очень медленным. Я почему-то думаю, что insert/delete в 300 миллионнной таблице будет ещё медленнее. К тому же, получение от SQL сервера varchar(1000) и преобразование в Byte Array делается намного быстрее, чем выборка 60-ти записей. А в клиентском запросе будет надо будет присоединять графики из таблицы в 300 миллионов записей( join по user_id). Признаться, выборка из 300 миллионов записей меня тоже пугает. 2 MasterZiv : MasterZivА с чего ты взял, что это примитивный запрос ? Так в этом запросе ничего нету. Отсутствуют join, group by, intersect, distinct, between итд.. В общем выше я привёл пример запроса чуть-чуть посложнее. ***** Сейчас думаю.. может совсем освободить таблицу Users от графиков ? Все графики - в таблицу UserXml. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Тогда таблица Users пухнуть не будет. И выборка списка участников из неё ускорится. А когда надо графики на странице - джойнить участника с его графиками по @id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 01:35 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 MasterZiv : MasterZivКстати, нарушение 1НФ хоть поздно, но detected. Какое нарушение ? Что такое 1НФ я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 01:39 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 02:39 AM, SerVal wrote: > Какое нарушение ? Что такое 1НФ я не знаю. Это и так понятно, что не знаешь. Узнавай. Хотя бы в википедии прочитай "1-ая нормальная форма". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 01:58 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. MasterZivХотя бы в википедии прочитай "1-ая нормальная форма". Почитал. И в чём же здесь нарушение ? В том что графики участника в его-же таблице ? Вообще-то, они являются неотемлемым атрибутом участника. И при перемещении их в друную таблицу они должны быть связаны с участником череp FOREIGN KEY. (теоретически). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 02:21 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37909685&tid=1541270]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 316ms |

| 0 / 0 |
