|
|
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Есть таблица участников - Users. В ней, есессно, участники. И для каждого участника надо хранить данные для построения графиков. Решил хранить графики в XML. Поле total_credit_xml xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. Клиентское приложение достаёт из базы total_credit_xml и строит график. Всё бы ничего, да когда число участников увеличивается размеры таблиц и сама база сильно растёт. :( При числе участников в 300 тыс. размер базы увеличивается до 40-50 гигабайт. Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже тормозит. Задержки в выводе страниц на экран становятся 3-4 секунды. :( В общем, изобретать велосипед не хочется. Посоветуйте что-нибудь. Или поделитесь, пожалуйста, опытом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2012, 20:06 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValПри числе участников в 300 тыс. размер базы увеличивается до 40-50 гигабайт. Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже тормозит. Задержки в выводе страниц на экран становятся 3-4 секунды. :( А можно пример - как выглядит экран, на который выведены 300 тысяч графиков?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2012, 20:14 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 Dimitry Sibiryakov : Можно: http://stats.boinc.ru/stats/ShowProject.aspx?pr_name=Sat (минут через 10 перегенерю на сегодняшнее число и будут доступны участники, команды, компьютеры..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2012, 20:22 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValМожно: И что из этого тормозит? У меня страница открылась мгновенно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2012, 20:30 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 Dimitry Sibiryakov : Дмитрий, сейчас показана только статистика Российского проекта SAT@home. Это маленький проект. Размер базы всего 400 мегабайт. - число участников всего 2488. Но есть и другие проеты, например Seti@home или Einstein@home. С числом участников в 300-400 тысяч и числом компьютеров 1-3 миллиона(для компиков - тоже графики). Вот для них базы и получаются в 40-50 гигабайт. ****** Может xml графики компрессировать перед засовыванием в базу ? А при вынимании декомпрессировать ? (тогда хранить их как как varbinary) Вот я и интересуюсь, кто как хранит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2012, 20:51 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Наверное, надо определить сначала, где именно тормозит. Разделить процесс на этапы, и смотреть каждый этап за какое время выполняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2012, 23:51 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
ТС, а в какой БД XML хранишь? Она умеет с XML по особому обращаться? И второе: данные у тебя старые не меняются, только дополняются новые. Храни просчитанные агрегаты,у тебя же запросы даже не меняются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 00:40 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
АнатоЛойа в какой БД XML хранишь? - Микрософт SQL Server. АнатоЛойОна умеет с XML по особому обращаться? - я не очень понимаю, что значит по-особому. :( И второе: данные у тебя старые не меняются, только дополняются новые. Храни просчитанные агрегаты,у тебя же запросы даже не меняются АнатоЛой , я чего-то не понимаю. При каждом обновленлии статистики графики пересчитываются. Да они совсем простые, типа день/значение за 2 месяца. (DateTime/Int64) А что такое просчитанные агрегаты ??? S.G. Наверное, надо определить сначала, где именно тормозит. - так это видно. Тормозит SQL Server. При размере базы в 40-50 гигабайт он долго читает с диска. Даже при простых запросах, типа select COUNT(*) from Users where total_credit > 100 задержка в 1-2 секунды. ***** Сейчас посмотрел: Несжатый график - 5 KBytes. Сжатый в Base64String - 600 bytes. Интересно, а MS SQL 2008 умеет сжимать данные ? типа zip/upzip ? Мож ему где-то галочку поставить, чтобы это поле сжимал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 09:40 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Умеет ли СУБД использовать XML-файл не просто как файл, который отдаёт клиенту, а выполнять над ним более сложные действия на стороне сервера: строить индексы по внутреннему содержимому XML, использовать XPath для запросов к содержимому XML, ... [quot SerVal] АнатоЛойИ второе: данные у тебя старые не меняются, только дополняются новые. Храни просчитанные агрегаты,у тебя же запросы даже не меняются АнатоЛой , я чего-то не понимаю. При каждом обновленлии статистики графики пересчитываются. Да они совсем простые, типа день/значение за 2 месяца. (DateTime/Int64) А что такое просчитанные агрегаты ??? Если данные настолько простые , зачем используешь XML? Ложи в простую таблицу. Просчитанные агрегаты: это промежуточные результаты, которые рассчитываются на основании исходных (первичных) данных, сохраняются как дополнительная информация в БД и используется в дальнейших расчётах, чтобы ускорить/облегчить расчёт новых данных. У тебя текущие значения на твоих графиках всегда можно посчитать как: суммарное значение, которые было вчера + сумма значений, котоорые поступили сегодня. Сегодня посчитал: сохрани число и дату/время. Завтра будешь считать: возьми вчерашний расчёт, добавь к нему свежие данные, и снова сохрани. Делов-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 10:50 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
АнатоЛойУмеет ли СУБД использовать XML-файл не просто как файл, который отдаёт клиенту, а выполнять над ним более сложные действия на стороне сервера: строить индексы по внутреннему содержимому XML, использовать XPath для запросов к содержимому XML, ... - умеет. А зачем базе что-то делать с графиками ? На стороне клиента(обновителя статистики) это намного быстрее. АнатоЛойЕсли данные настолько простые, зачем используешь XML? Ложи в простую таблицу. Что-то я никак не пойму.. У каждого участника 9 разных графиков. У каждой команды, страны и компьютера - тоже по 9 графиков. В какие таблицы их ложить ? АнатоЛойСегодня посчитал: сохрани число и дату/время. Завтра будешь считать: возьми вчерашний расчёт, добавь к нему свежие данные, и снова сохрани. Делов-то... Так оно так и делается. Предыдущий график используется для расчёта следующего. В каждый график ежедневно добавляется дневное значение. Самый старый день удаляется. Поэтому в графике всегда 60 значений(дата/время и значение). ..наверное, я чего-то не понимаю. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 11:15 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValЧто-то я никак не пойму.. У каждого участника 9 разных графиков. У каждой команды, страны и компьютера - тоже по 9 графиков. В какие таблицы их ложить ?в одну простую таблицу: Код: plaintext 1. 2. 3. Всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 11:25 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Ну ещё поле graphid, раз графиков у юзера может быть несколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 11:26 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValS.G. Наверное, надо определить сначала, где именно тормозит. - так это видно. Тормозит SQL Server. При размере базы в 40-50 гигабайт он долго читает с диска. Даже при простых запросах, типа select COUNT(*) from Users where total_credit > 100 задержка в 1-2 секунды. ну, отсюда не видно, где тормозит. Еще например, я не понял, xml - их много, по одному на каждого участника, или один за всех? И почему был выбран xml? В программне было что-то готовое для отображения xml, или просто так? В принципе данные для графика хорошо держать просто в базе (как уже подсказали). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 11:35 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/07/2012 09:51 PM, SerVal wrote: > Может xml графики компрессировать перед засовыванием в базу ? А при вынимании > декомпрессировать ? > (тогда хранить их как как varbinary) Тоже хорошая идея. Если они достаточно большие. Если маленькие, то не будет эффекта уменьшения --в архивах заголовки всякие есть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 12:14 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/07/2012 09:06 PM, SerVal wrote:> Есть таблица участников - Users. В ней, есессно, участники. И для каждого > участника надо хранить данные для построения графиков. > Решил хранить графики в XML. > > Поле total_credit_xml xml > > <chart> > <title>Total Credit</title> > <values> > <x_value>09.06.2012</x_value> > <y_value>0</y_value> > </values> > .. > </chart> > > > > Клиентское приложение достаёт из базы total_credit_xml и строит график. Нормальное вполне решение. > > Всё бы ничего, да когда число участников увеличивается размеры таблиц и сама > база сильно растёт. :( > При числе участников в 300 тыс. размер базы увеличивается до 40-50 гигабайт. 300 тыщ -- маленькая таблица. > Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже > тормозит. Задержки в выводе страниц на экран становятся 3-4 секунды. :( Это не изза этого. По другим причинам. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 12:15 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
> - так это видно. Тормозит SQL Server. При размере базы в 40-50 гигабайт он долго > читает с диска. > Даже при простых запросах, типа select COUNT(*) from Users where total_credit > > 100 задержка в 1-2 секунды. Это по другим причинам. Ты видимо не представляешь, где простой запрос, а где сложный, так что не рассуждай, а шли уже конкретный тормозящий запрос с описанием таблиц. А к решению о том, как хранить графики, это не относится. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 12:18 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
1. Использовать не XML а бинарную серилизацию в блоб - XML избыточен - мало того, что теги, да еще и числа представленны неэффектино. 2. "Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже тормозит" - если в этом показе не используется XML и при этом тормозит, это странно - по идее длинные поля - "out of row" и не должны сильно влиять на селекты, если они ими не используется (на сервер, надеюсь не уходит select * from table?) в MS SQL есть спецтип для XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 12:27 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 tanglir : авторв одну простую таблицу: myTable ( userid, x, y, graphid ) Всё. Так получится на каждого участника: 9 графиков -> RowCount = 9*60 дней. = 530 записей. На 300 тыс. участников соответственно -> 300тыс*530= 159 000 000 (159 миллионов записей в таблице) Из 150 милионов записей я ещё не выбирал, но подозреваю, что выборка типа select x, y, graphid from myTable where userid= @userid может оказаться не очень быстрой. ************* 2 S.G. : S.G.не понял, xml - их много, по одному на каждого участника У каждого участника - по 9 xml графиков: total_credit_xml, average_credit_xml ... 2 MasterZiv : xml поля сжимаются с 5 KB до 600 байт(varchar). В ближайшее время попробую. Ты видимо не представляешь, где простой запрос, а где сложный.. Это сложный запрос: select count(*) from Users where total_credit >100 order by total_credit desc ? Я проверил в SQL-studio: запрос длится 2-3 секунды(если юзеров >=300 тыс.) ****** 2 F# : авторесли в этом показе не используется XML.. - ну как это не используются ? Графики участника должны же показыватся. Вот как здесь: Участник _2e_ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 13:03 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 F# : F#1. Использовать не XML а бинарную серилизацию в блоб - XML избыточен Надо признаться, я не знаю, что такое блоб . Это varbinary(max) ? "Бинарная серилизация в блоб".. как-то я плохо себе представляю что это такое. :( А при этой "бинарной серилизации в блоб" размер сохраняемых данных уменьшится ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 13:18 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerVal, авторРешил хранить графики в XML. дата - допустим, 8 байт (или 3 байта date в сиквеле2008) значение - допустим, 8 байт (или 16, не важно) автор<chart> <title>Total Credit</title> <values> <x_value>09.06.2012</x_value> <y_value>0</y_value> </values> ... </chart> ??? я действительно не понимаю чем обосновано решение. сэкономил на адски большой но идеально узкой табличке с точками? то что эти точки теперь занимают: дата - 28 байт значение - 20-30 байт это типа экономия? или высока вероятность появления чего-то кроме X-Y? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 13:26 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValИз 150 милионов записей я ещё не выбирал, но подозреваю, что выборка типа select x, y, graphid from myTable where userid= @userid может оказаться не очень быстрой.А вы не подозревайте, а про индексы почитайте для начала. Когда поймёте, что такое селективность, какова она у поля "юзер" в вашем запросе и при чём тут индексы - велкам бэк. Впрочем, к тому времени подобные вопросы у вас уже пропадут :) SerValЭто сложный запрос: select count(*) from Users where total_credit >100 order by total_credit desc ? Я проверил в SQL-studio: запрос длится 2-3 секунды(если юзеров >=300 тыс.)Угу, сложный, аж жуть. Если индекса по "тотал_кредит" нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 13:35 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
tanglirв вашем запросев данных, если точнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 13:35 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 tanglir : авторА вы не подозревайте, а про индексы почитайте для начала. ..Если индекса по "тотал_кредит" нету. Ну как это нету ??? Есессно. есть. Без индексов никак нельзя. Однако ж, это такая простая и сама собой подразумевающаяся вещь, что я и писать не стал. О них и так все знают. (пожалуй, единственная проблема с индексами - это их дефрагментация после DBCC SHRINKDATABASE..) И констрансы на таблицы почти все убрал. Проверяю перед select и update вручную. Так быстрее(хоть и менее надёжно). Но об этом-то что писать ? Это тоже все знают. ***** Решил пока сжимать xml-ки в Base64String и хранить в базе как varchar(1000). Вечером буду переделывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 13:58 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 Решил хранить : Ну Вы подскажите идею, как и в каком виде хранить двухмесячные значения x, y ? ( DateTime и Int64 соответственно ). Я ж не против всё переделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 14:04 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто не изза этого. По другим причинам. +1. ТС, ищи узкое место в своём процессе: из какиз действий он состоит, сколько они по отдельности длятся, почему, как улучшить действие либо процесс в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2012, 17:38 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37908416&tid=1541270]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 401ms |

| 0 / 0 |
