powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить графики в базе данных ?
25 сообщений из 96, страница 1 из 4
Как лучше хранить графики в базе данных ?
    #37907875
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица участников - Users. В ней, есессно, участники. И для каждого участника надо хранить данные для построения графиков.
Решил хранить графики в XML.

Поле total_credit_xml xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<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 гигабайт. Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже тормозит. Задержки в выводе страниц на экран становятся 3-4 секунды. :(

В общем, изобретать велосипед не хочется. Посоветуйте что-нибудь. Или поделитесь, пожалуйста, опытом.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37907883
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValПри числе участников в 300 тыс. размер базы увеличивается до 40-50 гигабайт.
Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже тормозит.
Задержки в выводе страниц на экран становятся 3-4 секунды. :(

А можно пример - как выглядит экран, на который выведены 300 тысяч графиков?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37907889
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dimitry Sibiryakov :
Можно: http://stats.boinc.ru/stats/ShowProject.aspx?pr_name=Sat

(минут через 10 перегенерю на сегодняшнее число и будут доступны участники, команды, компьютеры..)
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37907894
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValМожно:
И что из этого тормозит? У меня страница открылась мгновенно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37907908
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dimitry Sibiryakov :
Дмитрий, сейчас показана только статистика Российского проекта SAT@home.
Это маленький проект. Размер базы всего 400 мегабайт. - число участников всего 2488.

Но есть и другие проеты, например Seti@home или Einstein@home. С числом участников в 300-400 тысяч и числом компьютеров 1-3 миллиона(для компиков - тоже графики). Вот для них базы и получаются в 40-50 гигабайт.
******
Может xml графики компрессировать перед засовыванием в базу ? А при вынимании декомпрессировать ?
(тогда хранить их как как varbinary)

Вот я и интересуюсь, кто как хранит.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908008
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, надо определить сначала, где именно тормозит. Разделить процесс на этапы, и смотреть каждый этап за какое время выполняется.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908033
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС, а в какой БД XML хранишь? Она умеет с XML по особому обращаться?
И второе: данные у тебя старые не меняются, только дополняются новые. Храни просчитанные агрегаты,у тебя же запросы даже не меняются
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908182
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛойа в какой БД 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 ?
Мож ему где-то галочку поставить, чтобы это поле сжимал ?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908307
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Умеет ли СУБД использовать XML-файл не просто как файл, который отдаёт клиенту, а выполнять над ним более сложные действия на стороне сервера: строить индексы по внутреннему содержимому XML, использовать XPath для запросов к содержимому XML, ...

[quot SerVal]
АнатоЛойИ второе: данные у тебя старые не меняются, только дополняются новые.
Храни просчитанные агрегаты,у тебя же запросы даже не меняются

АнатоЛой , я чего-то не понимаю. При каждом обновленлии статистики графики пересчитываются.
Да они совсем простые, типа день/значение за 2 месяца. (DateTime/Int64)
А что такое просчитанные агрегаты ???

Если данные настолько простые , зачем используешь XML? Ложи в простую таблицу.

Просчитанные агрегаты: это промежуточные результаты, которые рассчитываются на основании исходных (первичных) данных, сохраняются как дополнительная информация в БД и используется в дальнейших расчётах, чтобы ускорить/облегчить расчёт новых данных.

У тебя текущие значения на твоих графиках всегда можно посчитать как:
суммарное значение, которые было вчера + сумма значений, котоорые поступили сегодня.
Сегодня посчитал: сохрани число и дату/время. Завтра будешь считать: возьми вчерашний расчёт, добавь к нему свежие данные, и снова сохрани. Делов-то...
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908375
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛойУмеет ли СУБД использовать XML-файл не просто как файл, который отдаёт клиенту, а выполнять над ним более сложные действия на стороне сервера: строить индексы по внутреннему содержимому XML, использовать XPath для запросов к содержимому XML, ...
- умеет. А зачем базе что-то делать с графиками ? На стороне клиента(обновителя статистики) это намного быстрее.

АнатоЛойЕсли данные настолько простые, зачем используешь XML? Ложи в простую таблицу.
Что-то я никак не пойму.. У каждого участника 9 разных графиков. У каждой команды, страны и компьютера - тоже по 9 графиков.
В какие таблицы их ложить ?

АнатоЛойСегодня посчитал: сохрани число и дату/время. Завтра будешь считать: возьми вчерашний расчёт, добавь к нему свежие данные, и снова сохрани. Делов-то...
Так оно так и делается. Предыдущий график используется для расчёта следующего.
В каждый график ежедневно добавляется дневное значение. Самый старый день удаляется.
Поэтому в графике всегда 60 значений(дата/время и значение).

..наверное, я чего-то не понимаю. :(
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908416
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValЧто-то я никак не пойму.. У каждого участника 9 разных графиков. У каждой команды, страны и компьютера - тоже по 9 графиков.
В какие таблицы их ложить ?в одну простую таблицу:
Код: plaintext
1.
2.
3.
userid
x
y

Всё.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908418
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ещё поле graphid, раз графиков у юзера может быть несколько.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908445
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValS.G. Наверное, надо определить сначала, где именно тормозит.
- так это видно. Тормозит SQL Server. При размере базы в 40-50 гигабайт он долго читает с диска.
Даже при простых запросах, типа select COUNT(*) from Users where total_credit > 100 задержка в 1-2 секунды.
ну, отсюда не видно, где тормозит.
Еще например, я не понял, xml - их много, по одному на каждого участника, или один за всех?
И почему был выбран xml? В программне было что-то готовое для отображения xml, или просто так?
В принципе данные для графика хорошо держать просто в базе (как уже подсказали).
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908556
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/07/2012 09:51 PM, SerVal wrote:

> Может xml графики компрессировать перед засовыванием в базу ? А при вынимании
> декомпрессировать ?
> (тогда хранить их как как varbinary)

Тоже хорошая идея. Если они достаточно большие. Если маленькие, то не будет
эффекта уменьшения --в архивах заголовки всякие есть.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908557
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908561
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> - так это видно. Тормозит SQL Server. При размере базы в 40-50 гигабайт он долго
> читает с диска.
> Даже при простых запросах, типа select COUNT(*) from Users where total_credit >
> 100 задержка в 1-2 секунды.

Это по другим причинам. Ты видимо не представляешь, где простой запрос, а где
сложный, так что не рассуждай, а шли уже конкретный тормозящий запрос с
описанием таблиц. А к решению о том, как хранить графики, это не относится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908588
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
1. Использовать не XML а бинарную серилизацию в блоб - XML избыточен - мало того, что теги, да еще и числа представленны неэффектино.
2. "Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже тормозит" - если в этом показе не используется XML и при этом тормозит, это странно - по идее длинные поля - "out of row" и не должны сильно влиять на селекты, если они ими не используется (на сервер, надеюсь не уходит select * from table?)

в MS SQL есть спецтип для XML
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908699
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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_
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908742
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 F# :
F#1. Использовать не XML а бинарную серилизацию в блоб - XML избыточен
Надо признаться, я не знаю, что такое блоб . Это varbinary(max) ?

"Бинарная серилизация в блоб".. как-то я плохо себе представляю что это такое. :(

А при этой "бинарной серилизации в блоб" размер сохраняемых данных уменьшится ?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908761
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?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908783
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 тыс.)Угу, сложный, аж жуть. Если индекса по "тотал_кредит" нету.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908786
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirв вашем запросев данных, если точнее.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908849
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 tanglir :
авторА вы не подозревайте, а про индексы почитайте для начала.
..Если индекса по "тотал_кредит" нету.
Ну как это нету ??? Есессно. есть. Без индексов никак нельзя.
Однако ж, это такая простая и сама собой подразумевающаяся вещь, что я и писать не стал. О них и так все знают.
(пожалуй, единственная проблема с индексами - это их дефрагментация после DBCC SHRINKDATABASE..)

И констрансы на таблицы почти все убрал. Проверяю перед select и update вручную.
Так быстрее(хоть и менее надёжно). Но об этом-то что писать ? Это тоже все знают.
*****
Решил пока сжимать xml-ки в Base64String и хранить в базе как varchar(1000).
Вечером буду переделывать.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37908877
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Решил хранить :

Ну Вы подскажите идею, как и в каком виде хранить двухмесячные значения x, y ? ( DateTime и Int64 соответственно ).
Я ж не против всё переделать.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909336
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто не изза этого. По другим причинам.


+1. ТС, ищи узкое место в своём процессе: из какиз действий он состоит, сколько они по отдельности длятся, почему, как улучшить действие либо процесс в целом.
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 1 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить графики в базе данных ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]