powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить графики в базе данных ?
25 сообщений из 96, страница 3 из 4
Как лучше хранить графики в базе данных ?
    #37909816
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerVal2 S.G.:
а у этого запроса есть план выполнения, или как оно там называется в mssql-e?

Конкретно этот запрос имеет мало значения. Он слишком прост.
Меня интересует время выборки для таких простыз запросов.
Если такой примитив даёт задержку в 2-3 секунды, то рассматривать что-либо сложнее я не вижу смысла.Я по прежнему не вижу ничего, показывающее план выполнения, использование индексов. Только какие-то 2-3 секунды, измеренные- чем, часами?

SerValРазмер базы из-за компрессии графиков уменьшился с 48 до 24 GB MB. Уже на много лучше.

Однако продолжительность в 3 часов 25 минут 37 секунд. .. как-то не очень. :(Уменьшилось время передачи данных от сервера к клиентской программе, из-за компрессии (меньше данных передается). Увеличилось время обработки данных из-за компрессии-декомпрессии.

По прежнему нет понимания, что надо рассмотреть несколько этапов обработки данных - выборка, передача, обработка в клиентской программе (а также анализировать каждый из пунктов в отдельности) и смотреть куда уходит время.

и еще раз - размер БД и скорость выборки имеют весьма малую зависимость, если конечно бд построена правильно и не тянуть все на клиента.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909827
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так все данные у клиента. Клиентская программа только впихивает данные SQL серверу.
Выбирать пока нечего. А чтобы быстрее впихнуть, графики она компрессирует.

17 нитей впихивают 324562 участника в таблицу Users (по 20 тысяч каждая нить).
Самым простым INSERT-ом безо всяких условий.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	INSERT Users(
		id,
		teamid,
		countryid,
		name,
		create_time,
		stats_update_time,
		total_credit,
		....
		)
	SELECT
		@id,
		@teamid,
		@countryid,
		@name,
		@create_time,
		@stats_update_time,
		@total_credit,
		....


Больше ничего. Какой тут может быть план ? Индексирован сейчас только PRIMARY KEY.
И что тут рассматривать? - Statistics for INDEX 'PK__Users__3213E83F1CFC3D38'. ?

Все 17 нитей фактически простаивают, потому как медленнные диски не дают SQL серверу записать данные.
Загрузка процессоров клиентской программой - max 25%. SQL сервером - 10-15%.
И всё это из-за размера файлов базы. Лампочка диска горит не переставая.
Всё время уходит в ожидание записи на диск 5-и гигабайт данных. То же самое и при тупом UPDATE.

Вот вставка в пустую базу:

Einstein@Home: обновление участников завершено за 48 минут.
Einstein@Home: обновление компьютеров завершено за 1 часов 25 минут.

Все остальные вычисления занимают ничтожное время.(для них, действительно, надо создать индексы и смотреть execution plan).
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909830
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValЯ почему-то думаю"Мне говорят, что так будет лучше, но я думаю наоборот".
Зачем тогда спрашивать?
SerValВсе 17 нитей фактически простаивают, потому как медленнные диски не дают SQL серверу записать данные. И зачем тогда было спрашивать о производительности селект-запроса, если основной затык вовсе не в этом запросе, а в совершенно другой задаче - задаче быстрой записи 5Гб ненормализованных данных??
ЗЫ. Не пробовали через bulk insert (или как оно там в мсскл называется) эти же 5 Гб залить?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909836
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 tanglir :
tanglirЗачем тогда спрашивать?

Я спрашивал как зранить графики, чтобы они меньше места занимали.
Лучше - это когда на диск меньше пишется/читается.

Потому как простой запрос select count(*) from Hosts вызывает шмурыгание диска на 3-4 секунды.
Ну какие тут индексы нужны ? Или Execution Plan ? (я больше таким селестом не пользуюсь).

Я уж думал поставить базы на диск с компрессией данных, да чего-то опасюсь.
*****
tanglirНе пробовали через bulk insert (или как оно там в мсскл называется) эти же 5 Гб залить?
Не. Входные данные сырые и кривые. Проверять надо.

Сейчас переделываю: переношу графики - в другую таблицу. Формат прежний - compressed xml.
*****
Ребятки, спасибо за отклики и участие.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909911
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 03:21 AM, SerVal wrote:

> Почитал. И в чём же здесь нарушение ? В том что графики участника в его-же таблице ?

Нет, в том, что их МНОГО в одной таблице.

> Вообще-то, они являются неотемлемым атрибутом участника. И при перемещении их в
> друную таблицу они должны быть связаны с участником череp FOREIGN KEY.
> (теоретически).

Ну да. Соображаешь. Ещё сообрази, как выстроить PK этой таблицы, и будет всё ОК.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909919
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Больше ничего. Какой тут может быть план ? Индексирован сейчас только PRIMARY KEY.
> И что тут рассматривать? - Statistics for INDEX 'PK__Users__3213E83F1CFC3D38'. ?

План. Брать и рассматривать.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909920
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 06:50 AM, tanglir wrote:

> ЗЫ. Не пробовали через bulk insert (или как оно там в мсскл называется) эти же 5
> Гб залить?

bulk copy utility, bulk copy routines.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909924
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 07:36 AM, SerVal wrote:

> Я уж думал поставить базы на диск с компрессией данных, да чего-то опасюсь.

Не надо.


> Не. Входные данные сырые и кривые. Проверять надо.

Проверяй, а потом запихивай в bulk, кто ж мешает?


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910060
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 MasterZiv :
MasterZivПроверяй, а потом запихивай в bulk, кто ж мешает?

Ну что Вы в самом деле.. как это ""запихивай в bulk" ?
Мне ж надо сравнивать вчерашние и вновь полученные данные. Вчерашние-то куда ? В "бульк" уйдут ?
И что я сравнивать буду ???

И ещё: в полученных данных полно, например, участников без имени. Нам такие товарищи в статистике не нужны.
Запихиваем его в таблицу InvalidReceivedUser и продолжаем добавлять хороших в таблицу Users.
*****
Я смотрю сейчас на секционированные таблицы. Может можно новые данные загружать в новые секции.
А потом сравнить новое и старое, построить графики.. После чего убить старую секцию и нарезать ещё одну новую для нового дня.. итд.
Не знаю, правда, не слишком ли это сложно.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910171
SerVal,

в общем, нужно переделать на:
1. таблица Users - данные только об участниках (id,code,name,description)
2. таблица графиков
- [dbo].[Charts_Xml]
структура (User_ID INT, TypeChart INT, Value XML)
где TypeChart - тип графика
+ create nonclustered index IX_UserChart_Charts_Xml on Charts_Xml(User_ID, TypeChart)
всё будет летать

и про Нормальные формы почитай - интересно будет, (1НФ 2НФ 3 НФ)...
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910173
ну чтоб поменьше "переделывать" - Value можешь пока оставить как varchar(1000) или что там у тебя
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910245
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValЯ спрашивал как зранить графики, чтобы они меньше места занимали.

С этой точки зрения XML - наихудшее решение, даже сжатый, поскольку у него КПД (отношение
полезных байт к мусорной обвеске) - считанные проценты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910255
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 доброжелатель!!!!

Спасибо. Я примерно так уже переделываю.
Скорости это не прибавит(при нынешней структуре программы).
Но уже позволит не меняя таблицы Users, добавлять/удалять графики c меньшими затратами.
*****
А про нормальные формы уже почитал. Я советы не игнорирую, в какой бы форме они ни были высказаны.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910350
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 12:38 PM, Dimitry Sibiryakov wrote:

> С этой точки зрения XML - наихудшее решение, даже сжатый, поскольку у него КПД
> (отношение
> полезных байт к мусорной обвеске) - считанные проценты.

Дима, это копейки всё по сравнению с остальными проблемами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910353
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 11:23 AM, SerVal wrote:

> Ну что Вы в самом деле.. как это ""запихивай в bulk" ?

Есть bulk insert API, вызывай его вместо обычного ODBC или что ты там используешь.

> Мне ж надо сравнивать вчерашние и вновь полученные данные. Вчерашние-то куда ? В
> "бульк" уйдут ?
> И что я сравнивать буду ???

Ну не удаляй старые данные, и будет тебе счастье.


> Я смотрю сейчас на секционированные таблицы. Может можно новые данные загружать
> в новые секции.

Ты всё время не туда смотришь, как я посмотрю.
Тебе надо
0) видимо переделать структуру БД, нормализовать.
1) оптимизировать конкретные запросы, строя под них индексы.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910361
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSerValЯ спрашивал как зранить графики, чтобы они меньше места занимали.

С этой точки зрения XML - наихудшее решение, даже сжатый, поскольку у него КПД (отношение
полезных байт к мусорной обвеске) - считанные проценты.+1.
SerVal, на пальцах:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<chart>
<title>Total Credit</title>  
<values>
    <x_value>09.06.2012</x_value>
    <y_value>0</y_value>
  </values>
...
</chart>
против
iduseridgraphtypexy10050009.06.20120Добавляем 2 (биг)инта: +8(16)байт
Убираем xml-евскую шелуху: что-то около -100 байт.
PS. оффтоп, но заинтересовало, что означает эта конструкция:
Код: sql
1.
[stats_update_time] [datetime] NOT NULL DEFAULT (getutcdate()-getutcdate()),
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910444
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerVal Клиентская программа только впихивает Сначала проблемы было только с чтением. Потом, оказывается, с "впихиванием". Также мелькнула мысль о том, что надо сравнивать старое и новое. Может быть, надо было еще вначале поднатужиться и дать более полное описание, а не свои идеи велосипеда?

В общем, пока что:
1. xml - в топку.
2. Размер - уяснить себе смысл фразы "размер не имеет значения".
3. нормальные формы.

MasterZivДима, это копейки всё по сравнению с остальными проблемами.
тут одни проблемы :)
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910472
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДима, это копейки всё по сравнению с остальными проблемами.

Для хранения и выборки это может быть и копейки, но насколько я понял при добавлении
данных аффтар для каждого значения:
1) вытаскивает XML
2) парсит его
3) удаляет старейшее значение
4) добавляет новейшее
5) обратно компонует XML
6) сохраняет.

При таком стиле работы я удивляюсь, что он вообще способен дождаться окончания импорта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910506
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> В общем, пока что:
> 1. xml - в топку.

Ребята, да чем вам XML-то не угодил ?

Я всегда очень против использования XML в RDB, но
тут как раз тот случай, когда вполне можно использовать
либо XML, либо JSON, да хоть просто текст форматированный.
Это обрабатывается только на клиенте.
Хочется человеку -- ну и пусть, может у него с той стороны
уже (на клиенте) всё под это заточено.

> MasterZiv
> Дима, это копейки всё по сравнению с остальными проблемами.
>
> тут одни проблемы :)

Согласен.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910687
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 MasterZiv :
MasterZivЕсть bulk insert API, вызывай его вместо обычного ODBC или что ты там используешь.
Ну да, я помню Этот "бульк", он ещё для SQL 2003 был, а может и раньше.
Такая примочка к SQL серверу, чтобы он мог с диска C:\ файлы читать.
Правда, я никак не пойму
1. отчего "бульк" будет быстрее простейшего INSERT-а.
2. зачам сначала забирать данные в память, проверять, потом опять скидывать на диск,
чтобы BCP опять читал их с диска и запихивал в таблицу ?

Про ODBC тоже что-то помню. Кажется, это такой старинный драйвер для чего-то.
Правда не помню, где он используется и зачем. :(

MasterZivУбираем xml-евскую шелуху: что-то около -100 байт.
100 байт на один день. 60 дней со значениями Compressor сжимает до 600 байт в Base64String или 420 bytes в varbinary.

2 S.G. :
S.G.Сначала проблемы было только с чтением. Потом, оказывается, с "впихиванием".
Ну, я же с самого начала написал, что надо как-то ужать размеры графиков, хранящихся в базе данных.

S.G.Также мелькнула мысль о том, что надо сравнивать старое и новое
- ну а как же. А из чего же строятся графики за неделю, месяц... ?

S.G.3. нормальные формы.
Так я не против чего-нибудь нормализовать. Только пока нечего нормализовывать.
Скорость тупо зависит от скорости чтения/записи на диск.

2 tanglir :
tanglirно заинтересовало, что означает эта конструкция:
[stats_update_time] [datetime] NOT NULL DEFAULT (getutcdate()-getutcdate()),
Это SQL аналог CPP и C# DateTime.MinValue.(мнимальная дата 1900 год).
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910705
Жоао
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SerValПравда, я никак не пойму <, …> отчего "бульк" будет быстрее простейшего INSERT-а.
Оттого, что каждый простейший INSERT — это отдельная транзакция , а «бульк», по идее, должен все данные залить в единственной транзакции .
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910716
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dimitry Sibiryakov :
Dimitry SibiryakovДля хранения и выборки это может быть и копейки, но насколько я понял при добавлении
данных аффтар для каждого значения:
1) вытаскивает XML
2) парсит его
3) удаляет старейшее значение
4) добавляет новейшее
5) обратно компонует XML
6) сохраняет.

При таком стиле работы я удивляюсь, что он вообще способен дождаться окончания импорта.
Примерно так.
Однако ж я уже писал, что 60 нитей с готовыми INSERT-ами ждут, когда SQL сервер освободится для следущей записи на диск..
Нагрузка на процессор - никакая. Ну и сам SQL сервер тоже ждёт, пока что-то запишется на диск. :(

Тут никакие индексы не помогут. Средняя скорость записи SQL сервером на диск ~ 20-40 МБ в секунду. А иногда падает до 10. :(
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37910914
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 04:01 PM, SerVal wrote:

> 1. отчего "бульк" будет быстрее простейшего INSERT-а.

Он нетранзационный.

> 2. зачам сначала забирать данные в память, проверять, потом опять скидывать на диск,
> чтобы BCP опять читал их с диска и запихивал в таблицу ?

Чтобы проверить.
К тому же, если ты будешь ипользовать bulk copy API , записывать на диск
вовсе не обязательно.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911014
Забавно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SerVal2 Dimitry Sibiryakov :
Dimitry SibiryakovДля хранения и выборки это может быть и копейки, но насколько я понял при добавлении
данных аффтар для каждого значения:
1) вытаскивает XML
...
6) сохраняет.

При таком стиле работы я удивляюсь, что он вообще способен дождаться окончания импорта.
Примерно так.
Однако ж я уже писал, что 60 нитей с готовыми INSERT-ами ждут, когда SQL сервер освободится для следущей записи на диск..
Нагрузка на процессор - никакая. Ну и сам SQL сервер тоже ждёт, пока что-то запишется на диск. :(

Тут никакие индексы не помогут. Средняя скорость записи SQL сервером на диск ~ 20-40 МБ в секунду. А иногда падает до 10. :(

Вообще, интересно увидеть план запроса, которым получаете
Dimitry Sibiryakov1) вытаскивает XML

а все остальное (парсинг, и т.д.) обрабатывается на сервере или на клиенте?

И все-же, попробуйте вариант который советовали Вам раньше.
Просто, одну табличку. Причем, пока без удаления данных из нее и расчета агрегатов.
Залейте в нее данные, добавьте индексы чтобы была высокая селективность, и попробуйте на табличке типичные запросы. Если скорость не устроит, добавить табличку с расчитанными агрегатами.
Как писали ранее, размер базы, при правильных индексах, почти не имеет значения.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911045
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
> В общем, пока что:
> 1. xml - в топку.

Ребята, да чем вам XML-то не угодил ?

Я всегда очень против использования XML в RDB, но
тут как раз тот случай, когда вполне можно использовать
либо XML, либо JSON, да хоть просто текст форматированный.
Это обрабатывается только на клиенте.
Хочется человеку -- ну и пусть, может у него с той стороны
уже (на клиенте) всё под это заточено.
Я вначале не имел ничего против. Вопрос звучал "как хранить" - ну если уже сделано так, пускай хранит в xml. Когда надо, вытащил пару графиков, показал.
Но, оказывается, там надо не просто хранить, а активно работать с ними, обновлять и пр.
Вообще, топикстартер упорно хранит тайну - что надо делать?
На вопрос- "можно ли посмотреть какой из процессов самый медленный" - ответ "да и так понятно что диск виноват"
На вопрос- "а что там с запросами на чтение, посмотреть план" - ответ "да зачем план, и так понятно, база большая вот и медленно".
Такой вот, диалог :)
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 3 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить графики в базе данных ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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