Загрузка котировок в базу данных - страница 2

 
Yuriy Zaytsev:
 

p.s.  базы не заточены на работу с таймсериями.    - неправда Ваша !  реально не хочу обидеть --   нужны  заточенные руки   - скорости я Вам показал

 

ОК. Есть таблица тиков: datetime2(7)[Time] - первичный индекс, double[Bid];  пускай будет 50 млн. записей.

Нужно построить таймфрейм М1.

Как будете делать, и сколько времени займет?

 
Vladimir Kazakov:

ОК. Есть таблица тиков: datetime2(7)[Time] - первичный индекс, double[Bid];  пускай будет 50 млн. записей.

Нужно построить таймфрейм М1.

Как будете делать, и сколько времени займет?

     саму технологию сборки м1  можно  реализовать одной серверной  процедурой    что я и воспроизвел

     но у меня есть лишь на 5 миллионов ТИКОВ 

     время  сборки  минутки из 5 миллионов   ЗАНЯЛО 0.02  СЕКУНДЫ   

     если у вас есть тиковая на 50 миллионов одним файлом пожалуйста дайте ссылку     полагаю соберет примерно так же 

 

 

Ну, написать можно все, что угодно. Я делал с помощью курсоров, собирал из семи пар что-то типа индекса доллара. И строчка выходной таблицы создавалась по несколько милли(!)секунд. Т.е. 4 миллиона на выходе занимает почти сутки.

 
Vladimir Kazakov:

Ну, написать можно все, что угодно. Я делал с помощью курсоров, собирал из семи пар что-то типа индекса доллара. И строчка выходной таблицы создавалась по несколько милли(!)секунд. Т.е. 4 миллиона на выходе занимает почти сутки.

   а  минутка  по времени сколько собиралась ?  по одной паре!

    (  у меня 5 миллионов  строк тиков собирались  в минутку  за 0.02  сек )  только это не одна строка а ВСЯ минутка !!!

 
Да не помню я уже - давно это было. Но ощущение, что работаешь на Квик Бейсике ))
 
Vladimir Kazakov:
Да не помню я уже - давно это было. Но ощущение, что работаешь на Квик Бейсике ))

понятно , гораздо медленней  - если Вы это делали на SQL  - то очевидно = делали неправильно


Vladimir Kazakov:

Туда тоже можно.

А вообще, это пустая трата времени: базы не заточены на работу с таймсериями. На mssql сводил несколько тиковых котировок за 10 лет - это караул: за 8 часов около 2% обработалось. За пару часов написал на С++ конвертер, и еще за пару часов все перелопатил.

пару часов  -  это  тоже  ужасно медленно -  тем более на СИ  ...  

объем данных ведь  просто смешной...  на SQL  , быстрее будет


А вообще, это пустая трата времени: базы не заточены на работу с таймсериями.

Ну вот собственно -  это Ваше высказывание   мы разметали с Вами же   в пух и прах - просто камня на камне не оставили ... ;-)

 
Yuriy Zaytsev:
 

Ну вот собственно -  это Ваше высказывание   мы разметали с Вами же   в пух и прах - просто камня на камне не оставили ... ;-)

А чем разметали то? Запрос продемонстрируете?

Да даже простой insert bulk будет несколько часов 10Гб файл импортировать.

 
Vladimir Kazakov:

А чем разметали то? Запрос продемонстрируете?

Да даже простой insert bulk будет несколько часов 10Гб файл импортировать.

Проверяли на чем ? 

даже тиковая история не вытягивает на серьезные  объемы

считайте  за сколько прольется  10 гб  - если 340 мегов проливается за 30 секунд   но это на моем сервере   

 в районе  15 минут -  о каких часах Вы говорите ?  

вообще 10ггб это не объемы  для MS SQL - это даже не напрягает более менее серьезный сервер 

в практике работаю с базами 0.5 тб   -  4 тб  ..  

10ггб  это  просто детский лепет  ...  

 

Хм, так и пришлось заводить шарманку:

csv размером 760Мб 21,5 млн. строк из трех полей: время, бид, аск.

bulk insert первый раз - 2:55, второй, третий раз 2:30 примерно.

Т.е. 10Гб будет минут 30. Но раньше я загонял 5 полей (+объемы по бид и аск). Ну, и оперативки тогда было поменьше - 16Гб, сейчас 48Гб. Но оперативка здесь вряд ли актуальна.

База с журналом стоит на RAID 0 из четырех дисков, довольно быстром: из оперативки 10Гб записывается где-то за 6,5 сек. Два процессора Е5-2450.

 
Yuriy Zaytsev:

за месяц тики прогружу в ms sql  за 15-20  секунд  -   по крайне мере файл в 320 мегобайт гружу  за  30 секунд

одной  операция считает эту мелочь  -   второй  операцией сразу поместит в базу

а уже выборки на таком смешном объеме по времени  даже не летать  будут  - а просто мелькать

Тиковые данные грузятся в виде "как есть" или с обработкой? 

У меня не просто грузятся тики, а делается семплирование с периодом 1 сек. Делал профайлинг, много времени уходит на преобразование даты-времени в текстовом формате в Матлабовский формат времени

2015.10.30 05:25:52,1.09766,1.09776

Вот функция парсинга строки, вроде ускорить уже нельзя

%this function parses string in RateData DukasCopy format
%example : ParseTickCsvString('2012.01.17 05:27:08,1.27236,1.27241')
%or        ParseTickCsvString('2014.07.02 14:15:43.000,1.36480,1.36481') 
function [DateTime, Bid, Ask, Error] = ParseTickCsvString(str, msec)

dbgInStr = str;

try

    [date_time, str] = strtok(str,','); %get 2011.11.30 00:00:01.410
    [bid, str] = strtok(str,','); %bid as string
    [ask, str] = strtok(str,','); %ask as string
    if msec == 1
        DateTime = datenum(date_time, 'yyyy.mm.dd HH:MM:SS.FFF');
    else    
        DateTime = datenum(date_time, 'yyyy.mm.dd HH:MM:SS');
    end
    Bid = str2double(bid);
    Ask = str2double(ask);
    Error = 0;
catch
    fprintf('\n error in ParseTickCsvString, str = %s \n', dbgInStr);
    DateTime = 0;
    Bid = 0;
    Ask = 0;
    Error = 1;
    %i = input('press 1 for continue, 0 for abort');
end
Причина обращения: