powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить графики в базе данных ?
96 сообщений из 96, показаны все 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
Как лучше хранить графики в базе данных ?
    #37909384
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909412
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,

интересно, что показывает эксплейн этого запроса :)
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909419
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛойищи узкое место в своём процессе: из каких действий он состоит

Сейчас речь об 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.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909430
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Cane Cat Fisher :
Cane Cat FisherБред какой-то. Ведь этот запрос вернет одну строку
Ну ошибся я в качестве примера.(count тут не причём).
*****
Напугали меня. Понаделал кучу индексов на таблицы... начались блокировки при insert-ах. :(
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909444
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValselect top(10) * from Users where total_credit>100 order by total_credit desc
go

От БД не нужно требовать всегда быстро выдавать результат на любой запрос.
Проверяй на скорость выполнения те запросы, которые будет выполнять твоё приложение.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909465
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValНапугали меня. Понаделал кучу индексов на таблицы... начались блокировки при insert-ах. :(

Потому что индексы надо создавать с умом, а не от балды. EXPLAIN тут уже упомянули.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909498
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
drop table dbo.Users

CREATE TABLE dbo.Users(
	[id] [int] NOT NULL PRIMARY KEY ,
	[teamid] [int] NOT NULL DEFAULT 0,
	[countryid] [int] NOT NULL DEFAULT 0,
	[create_time] [int] NOT NULL, -- UNIX TIMESTAMP
	[stats_update_time] [datetime] NOT NULL DEFAULT (getutcdate()-getutcdate()),
	[total_credit] [decimal](28, 2) NOT NULL,
	[expavg_credit] [decimal](28, 2) NOT NULL,
	[credit_day] [decimal](28, 2) NOT NULL DEFAULT 0,
	[credit_week] [decimal](28, 2) NOT NULL DEFAULT 0,
	[credit_month] [decimal](28, 2) NOT NULL DEFAULT 0,
	[project_rank] [int] NOT NULL DEFAULT 0,
	[team_rank] [int] NOT NULL DEFAULT 0,
	[country_rank] [int] NOT NULL DEFAULT 0,
	[project_rank_day] [int] NOT NULL DEFAULT 0,
	[project_rank_week] [int] NOT NULL DEFAULT 0,
	[project_rank_month] [int] NOT NULL DEFAULT 0,
	[team_rank_day] [int] NOT NULL DEFAULT 0,
	[team_rank_week] [int] NOT NULL DEFAULT 0,
	[team_rank_month] [int] NOT NULL DEFAULT 0,
	[country_rank_day] [int] NOT NULL DEFAULT 0,
	[country_rank_week] [int] NOT NULL DEFAULT 0,
	[country_rank_month] [int] NOT NULL DEFAULT 0,
	[cpid] [varchar](32) NOT NULL,
	[expavg_time] [decimal](28, 2) NOT NULL,
	 [varchar](254) NULL,
	[name] [nvarchar](80) NOT NULL,

-- графики --
	[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
	)
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909524
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909525
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValподскажите какие индексы создать для Users ?

Это зависит от данных в этой таблице и запросов к ней. Какой процент записей в ней имеет
total_credit>100?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909526
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/08/2012 08:26 PM, SerVal wrote:

> 2 *Dimitry Sibiryakov*:
> Ну если Вы разбираетесь, подскажите какие индексы создать для Users ?

А это ещё немного зависит от того, какие запросы ты будешь выполнять, не
правда ли ?

> (таблицы Команд, Стран - такие же. Там я сам.. без ума, но по образу и подобию,
> так сказать..)

Ага, такие же. В них поля и в полях данные ...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909577
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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. Блокировки пропали. (Ура !)
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909583
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValХочется, чтобы этот запрос выполнялся не 3-5 секунд, а побыстрее.

Тогда создай DESCENDING index на total_credit.

SerValСейчас бы просто уменьшить время загрузки/обновления статистики и разрастание
таблиц из-за графиков.
Тогда как уже и сказали: выкинь к ЧМ этот XML и храни данные в реляционных таблицах, как
все нормальные люди.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909682
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909683
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?
нечто, показывающее используемые индексы, время и прочее?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909685
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dimitry Sibiryakov :
То есть Вы предлагаете создать дополнительную таблицу, где на каждого участника будет 17*60= 1020 записей ?
(17 графиков по 60 значений в каждом).

Итого, для 300 тыс. участников в таблице будет 300 тыс.* 1020 = 306 000 000 (306 миллионов записей)

Я правильно понял ?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909699
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
-- for aspx page ~/stats/UserStats.aspx

ALTER PROCEDURE [dbo].[GetUsers]
	@page_index int

AS
    SET NOCOUNT ON
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

declare @pr_name varchar(50)
select @pr_name=pr_name from Project

declare @start_rank int
set @start_rank = @page_index*100

SELECT top(100)
@pr_name as pr_name,
u.project_rank,
u.id,
u.teamid,
u.cpid,
u.project_rank_month, 
u.project_rank_week, 
u.project_rank_day, 
u.[name],
u.total_credit,
u.credit_day,
u.credit_week,
u.credit_month,
FLOOR(ROUND(u.expavg_credit,0)) as expavg_credit,
t.name as team_name,
t.cpid as team_cpid,
c.id as countryid,
c.name as country,
c.flag
FROM Users u
left outer join Countries c on (u.countryid=c.id)
left outer join Teams t on (u.teamid=t.id)

where u.project_rank>@start_rank
order by u.project_rank



Выполняется быстро, поскольку постраничный вывод для листания в 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 секунд. .. как-то не очень. :(
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909708
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValИтого, для 300 тыс. участников в таблице будет 300 тыс.* 1020 = 306 000 000
(306 миллионов записей)

Я правильно понял ?
Да. Сейчас у тебя те же миллионы записей запиханы в формат, который делает добавление и
удаление значений очень медленным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909709
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivИндексы могут сканироваться в любую сторону.
Тогда откуда 3 секунды на индексную выборку десяти записей?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909769
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Конкретно этот запрос имеет мало значения. Он слишком прост.
> Меня интересует время выборки для таких простыз запросов.

Понятия "такие простые запросы" не существует.
Каждый запрос конкретен, выполняется на конкретных данных и обладает
конкретной производительностью, обобщать тут не имеет никакого смысла.

> Если такой примитив даёт задержку в 2-3 секунды, то рассматривать что-либо
> сложнее я не вижу смысла.

А с чего ты взял, что это примитивный запрос ?



Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909771
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909773
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 12:45 AM, Dimitry Sibiryakov wrote:

> Тогда откуда 3 секунды на индексную выборку десяти записей?

Почему обязательно на индексную ?
Я как-то не просёк, что автор уже успел создать индекс нужный.
Или сообщить, что индекс уже был создан ранее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909784
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
Table UserXml
(
-- идентификатор участника
id int, 
-- его графики
total_credit_xml varchar(1000),
expavg_credit_xml varchar(1000),
credit_day_xml varchar(1000),
...
)



Тогда таблица Users пухнуть не будет. И выборка списка участников из неё ускорится.
А когда надо графики на странице - джойнить участника с его графиками по @id
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909786
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 MasterZiv :
MasterZivКстати, нарушение 1НФ хоть поздно, но detected.
Какое нарушение ? Что такое 1НФ я не знаю.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909792
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 02:39 AM, SerVal wrote:

> Какое нарушение ? Что такое 1НФ я не знаю.
Это и так понятно, что не знаешь. Узнавай.
Хотя бы в википедии прочитай "1-ая нормальная форма".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37909801
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
CREATE TABLE dbo.Users(
> -- графики --
> [total_credit_xml] [varchar](1000) NULL,


MasterZivХотя бы в википедии прочитай "1-ая нормальная форма".

Почитал. И в чём же здесь нарушение ? В том что графики участника в его-же таблице ?
Вообще-то, они являются неотемлемым атрибутом участника. И при перемещении их в друную таблицу они должны быть связаны с участником череp FOREIGN KEY. (теоретически).
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #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
Как лучше хранить графики в базе данных ?
    #37911116
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv , Вы пишите какие-то фантастические вещи.
Загрузить все данные в память. Прверить их 60-ю потоками. После чего передать их какому-то "бульку", который скопирует их в таблицу.
После чего загрузить данные из таблицы в память и начать их обработку - построение графиков, вычсление рангов.. итд.

У меня такое впечатление, что после этого, обработанные данные надо поделить на части и снова передать "бульку", чтобы он
записал их в разные таблицы. :)

Вообще-то, загрузчик статистики должен параллельно скачивать из Inet-а 40 статистик и параллельно обновлять 40 баз.
Если с каждой базой так "булькаться"...

15-20 статистик я пробовал - обновление локальных баз происходит за 9-10 часов. Суммарный объём баз 200-300 GB.
Ну вот как-то так. :)
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911165
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Забавно :
ЗабавноПросто, одну табличку. попробуйте на табличке типичные запросы.
Причем, пока без удаления данных из нее и расчета агрегатов.

Я уже писал выше. Нетути к SQL серверу никаких запросов! Он делает тупой insert и update.
Вот когда он будет делать это не за 9 часов как сейчас, а за час, тогда появятся запросы.

Забавноа все остальное (парсинг, и т.д.) обрабатывается на сервере или на клиенте?
- ещё раз говорю - всё делает клиент. А сервер только insert и update. примерно 250 GB данных.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911240
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValНетути к SQL серверу никаких запросов!А нахрена ж вы тогда целую страницу тут распинались, что вот какой сервер бяка, простейший каунт (с ордербаем, хы) посчитать не может меньше чем за 2 секунды??!

SerValвсё делает клиент.и даже данные проверяет тоже клиент? то есть сервер у вас по сути файлопомойка с SQL-интерфейсом? тогда тупо наращивайте дисковую подсистему, другого пути, наверное, нет...
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911280
SerVal,
авторОн делает тупой insert и update
не такой уж тупой с учетом вот этого 12984081 ужаса
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911294
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 S.G. : Я сначала не ответил на Ваш пост. Прошу принять мои извинения.

S.G.Я вначале не имел ничего против. Вопрос звучал "как хранить" - ну если уже сделано так, пускай хранит в xml.
Когда надо, вытащил пару графиков, показал.
Но, оказывается, там надо не просто хранить, а активно работать с ними, обновлять и пр.

Ну да. Кому ж нужны статические данные ? Всех интересует динамика.

S.G.Вообще, топикстартер упорно хранит тайну - что надо делать?
Надо побыстрее закатать полученные данные в базу. К SQL серверу никаких претензий не предьявляется.
Чем быстрее он выполняет простые Insert и Update , тем лучше. Всё остальное готовит клиент.

S.G.На вопрос- "а что там с запросами на чтение, посмотреть план" - ответ "да зачем план, и так понятно, база большая вот и медленно".
Такой вот, диалог :)
Ну вот типичный запрос на чтение:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT
id,
[name],
total_credit,
credit_day,
credit_week,
credit_month,
nusers,
nteams, 
nhosts
from Countries 
where id=@countryid


Такой же "сложности" запросы к Users, Teams.
S.G. , ну что здесь анализировать ??? Какой тут план запроса ??? :(

2 tanglir :
А нахрена ж вы тогда целую страницу тут распинались, что вот какой сервер бяка, простейший каунт (с ордербаем, хы) посчитать не может меньше чем за 2 секунды??!

Да, из-за того что база большая, выражение select COUNT(*) from Users я не применяю. Именно из-за медлючести.

вместо него:
Код: sql
1.
select @nusers = dbo.nRows('Users')


где func dbo.nRows:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ALTER FUNCTION [dbo].[nRows]
(
@table_name varchar(80)
)
RETURNS int
AS
BEGIN
declare @row_count int
select @row_count=
p.rows
FROM  
    sys.tables t 
INNER JOIN       
    sys.indexes i ON t.OBJECT_ID = i.object_id 
INNER JOIN  
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id 
WHERE t.name = @table_name

return @row_count
END



Про execution plan для select COUNT(*) from Users, я тоже ничего сказать не могу. :(

tanglirто есть сервер у вас по сути файлопомойка с SQL-интерфейсом?
Ну, он ещё таблички для сайта выдаёт. Тоже простыми селектами.

tanglirтогда тупо наращивайте дисковую подсистему, другого пути, наверное, нет...
Другой путь - уменьшать размеры данных, о чём я и спросил.

Ну и я пока не знаю, можно ли ставить для SQL сервера SSD диски.
Может быть четыре штуки по 256 GB в RAID0 не будут сильно изнашиваться ? (статистики нетути, поэтому - боюсь).
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911310
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValНу и я пока не знаю, можно ли ставить для SQL сервера SSD диски.
Может быть четыре штуки по 256 GB в RAID0 не будут сильно изнашиваться ?

Вы сначала с обычными дисками разберитесь. Обычный одиночный SATAII имеет скорость записи
раз в пять выше чем у вас там повыше показано.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911333
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovВы сначала с обычными дисками разберитесь. Обычный одиночный SATAII имеет скорость записи
раз в пять выше чем у вас там повыше показано.
Вы хотите сказать, что SQL сервер мог бы писать и побыстрее ?

Вот чего HD-Tune показывает для диска Дата(db_date):

...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911335
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValВот чего HD-Tune показывает для диска Дата(db_date):

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

В силу использования лога транзакций, которым так любят размахивать в "Сравнении СУБД", он
просто обязан писать на всю доступную скорость Sequential Write.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911397
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
SerVal 2 F# :
F#1. Использовать не XML а бинарную серилизацию в блоб - XML избыточен
Надо признаться, я не знаю, что такое блоб . Это varbinary(max) ?


Ага

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

А при этой "бинарной серилизации в блоб" размер сохраняемых данных уменьшится ?

Теоретически должен.

ВОт посмотрите, зачем сам хранить выделенное жирным

<chart>
<title> Total Credit </title>
<values>
<x_value> 09.06.2012 </x_value>
<y_value >0 </y_value>
</values>
...
</chart

Это раз. Сделать бинарный формат, в котором будут только нужные биты
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911418
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08/09/2012 06:32 PM, SerVal wrote:
*MasterZiv*, Вы пишите какие-то фантастические вещи.

Тебе =то лучше знать твою задачу, я только описываю возможности.

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

> Это чтение. У тебя основная нагрузка - на запись.

.... лога.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911468
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Надо признаться, я не знаю, что такое *блоб*. Это varbinary(max) ?
>
>
>
> Ага

Нет, тип TEXT или LONG VARCHAR.


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

1. Из чего состоит 300 000 ГБ данных? На 300 000 пользователей это 1 МБ. Весь этот МБ НУЖЕН в БД?
2. MSSQL позволяет не логировать работу с таблицей? Или даже с БД?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911768
Забавно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛойSerVal,

1. Из чего состоит 300 000 ГБ данных? На 300 000 пользователей это 1 МБ. Весь этот МБ НУЖЕН в БД?
2. MSSQL позволяет не логировать работу с таблицей? Или даже с БД?
А вы уверены что автор указал именно объем данных в базе? Может, это размер файла с данными а может, размер лога, а может это их суммарный объем.
А тормоза при добавлении данных - может у него первоначальный размер файлов бд маленький, а авторасширение установлено по 1 МБ, и клиент, который заливает данные, передает их по локальной сети?
А модель восстановления какая?
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37911801
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValНу вот типичный запрос на чтение:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT
id,
[name],
total_credit,
credit_day,
credit_week,
credit_month,
nusers,
nteams, 
nhosts
from Countries 
where id=@countryid


Такой же "сложности" запросы к Users, Teams.
S.G. , ну что здесь анализировать ??? Какой тут план запроса ??? :(

В зависимости от того, есть ли индекс по id, план запроса, а также время выполнения, будут существенно разными.


ps. Гм, может показаться, что я стою в позиции Капитана Очевидности, но в этом топике все совсем не очевидно
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37912009
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчёт неоднозначности - это точно...

SerValЕсть ... (тут и далее порезаны приведённые факты... (с) АнатоЛой)
Всё бы ничего, да когда число участников увеличивается размеры таблиц и сама база сильно растёт. :( (первое негативное отношение к факту. Все думают - ну растёт, ну и чё. У всех растёт :) (с) АнатоЛой). При числе участников в 300 тыс. размер базы увеличивается до 40-50 гигабайт. Соответвственно, показ участников в виде таблицы, со всякими join-нами тоже [b]тормозит - (второе негативное отношение к фактам (с) АнатоЛой)). Задержки в выводе страниц на экран становятся 3-4 секунды.[/b] :( (третье обозначенное отношение к фактам. Из чего участники обсуждения решают - проблема в скорости отображения данных!!! (с) АнатоЛой)
В общем, изобретать велосипед не хочется. Посоветуйте что-нибудь. Или поделитесь, пожалуйста, опытом.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #37912293
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из чего участники обсуждения решают - проблема в скорости отображения данных!!!

Ребятки, у меня нет желания что-то скрывать.
Просто, не хочется нагружать народ не относящимися к делу обстоятельствами.
Да ещё сочтут за рекламу или ещё что...
Ну раз уж вы оказались столь любезны, потараюсь развеять ваши сомнения и привести некоторые объяснения.

Я делаю сводную статистику участников добровольных распределённых вычислений.
Проектов распределённых вычислений около 60-ти. Каждый со своим сайтом, на который выкладывает статистику.
Выкладывает в виде сжатых xml файлов. Эта статистика стандартизована и доступна для скачивания ВСЕМ.
Для этого её и выкладывают. Даже расположение статистики стандартизовано: %SITE_URL%/stats

Например: Статистика проекта Einstein@home
Или : Статистика Российского проекта SAT@home

Программа скачивает эти файлы, декомпрессирует, парсит участников, команды, компьютеры и запихивает их
в таблицы Teams, Users, Hosts. Для показа на сайте: Сайт stats.boinc.ru

Как я уже писал, входные данные - правоверные xml файлы. Например команда:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  <team>
    <id>13</id>
    <type>0</type>
    <name>Russia Team</name>
    <userid>131</userid>
    <total_credit>11260604.286267</total_credit>
    <expavg_credit>0.000000</expavg_credit>
    <expavg_time>0.000000</expavg_time>
    <nusers>79</nusers>
    <founder_name>Andreev Alexandr</founder_name>
    <create_time>1171135000</create_time>
    <url>www.boinc.ru</url>
    <country>Russia</country>
    <joinable>1</joinable>
  </team>


На основе даннных о команде программа формирует простейший
INSERT into Team( id, type, name..) select @id, @type, @name..

То же самое для участников и их компьютеров. Как видите, ни большого ума, ни способностей тут не требуется.
Ну, а поскольку народ интересует очки за последний день, неделю и месяц, программа добавляет
графики. Ну, и вычисляет, места участников(ранги).
Вот тут-то и оказалось, что графики занимают больше места, чем сами участники.
******************
Сейчас создал индексы для total_credit
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE NONCLUSTERED INDEX [IX_U_TOTAL_CREDIT] ON [dbo].[Users] 
(
 [total_credit] ASC
)
INCLUDE ( [id]) WITH (
PAD_INDEX  = OFF, 
STATISTICS_NORECOMPUTE  = OFF, 
SORT_IN_TEMPDB = OFF, 
IGNORE_DUP_KEY = OFF, 
DROP_EXISTING = OFF, 
ONLINE = OFF, 
ALLOW_ROW_LOCKS  = ON, 
ALLOW_PAGE_LOCKS  = ON) 
ON [PRIMARY]


Посмотрю, теоретически должно помочь. Как проверю напишу.
*****
2 S.G. : id - PRIMARY KEY. Он, есессно, индексирован.
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #38255745
Ха. Вот так всегда, как на любом специализированном сайте, сидят супер-пупер-крутые матёрые спецы и поучают глупеньких, обратившихся к ним за помощью. А как доходит до реальной, интересной и сложной задачи, так сразу в кусты и молчок. Стыдно, господа!
...
Рейтинг: 0 / 0
Как лучше хранить графики в базе данных ?
    #38256888
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerVal,

ну допустим....

60 проектов, каждый из которых в стандартизированой форме (с неизменяемым количеством полей) выкладывает набор сущностей

почему на каждую такую сущность не завести таблицу? Или если эти сущности совпадают, не завести общие таблицы для таких сущностей с дополнительным полем идентификатора проекта?

В вашем же XML более 50% - паразитные (для БД) данные. то есть 45 Гб сразу жэе превратятся в 20.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  <team>
    <id>13</id>
    <type>0</type>
    <name>Russia Team</name>
    <userid>131</userid>
    <total_credit>11260604.286267</total_credit>
    <expavg_credit>0.000000</expavg_credit>
    <expavg_time>0.000000</expavg_time>
    <nusers>79</nusers>
    <founder_name>Andreev Alexandr</founder_name>
    <create_time>1171135000</create_time>
    <url>www.boinc.ru</url>
    <country>Russia</country>
    <joinable>1</joinable>
  </team>



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


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