УкраїнськаEnglishmRussian
Вход/Новый
Тема без ответов

Ограничение в 100000 записей в getVals() и другие вопросы по архивам


Автор Сообщение
Сообщение создано: 28. 03. 2021 [20:00]
samsond
Dmitry Samsonov
Зарегистрирован(а) с: 11.02.2020
Сообщения: 14
Здравствуйте!

Есть несколько вопросов по операциям с архивами средствами JavaLikeCalc.

Моя задача - организовать перенос данных из одного архива в другой.
Период следования данных в архиве - 0.00351 сек. Тип архива - на файловой системе (FSArch).
Количество записей, которые требуется перенести - около 4000000 (4 млн). Записи следуют непрерывно друг за другом.

Вопрос 1.

Попытка получить выборку вызовом

JAVASCRIPT
out = SYS.Archive["va_XXX"].getVals(startTimestamp, endTimestamp, 3510, "");


приводит к тому, что возвращается максимум 100001 запись, хотя должно быть примерно в 40 раз больше.

Прототип getVals() в исходниках имеет следующий вид (tarchval.h):

JAVASCRIPT
void TVArchive::getVals(TValBuf &buf, int64_t ibeg, int64_t iend, const string &arch, int limit = 100000, bool onlyLocal)


то есть в нем описан параметр int limit, который как раз и определяет предельное количество элементов выборки, а 100000 - значение по умолчанию.

Вопрос - можно ли как-то управлять этим параметром из JavaLikeCalc? В документации на API упоминаний нет, наивное дописывание в конец списка аргументов не сработало...


Вопрос 2.

При попытке запроса выборки, где количество элементов превышает это ограничение в 100000 элементов, получается так, что выборка выравнивается по времени окончания iend, а не начала ibeg.
Конечно, это в целом не противоречит документации, но все же такое поведение getVals() не интуитивно. А главное - не позволяет нормально вынимать данные частями в случае, если предел превышен.

Может, это ошибка?

Вопрос 3.
Не очень понятно, как работает "жесткая" и "мягкая" сетка в архиве.

В моем понимании, жесткая сетка - это когда
1) задан timestamp начала архива ibeg, его period
2) timestamp ЛЮБОГО помещенного в него значения всегда будет равен ibeg + N*period, независимо от того есть ли в архиве пропуски и пр.

Мягкая сетка - это когда условие 2) не применяется, т.е. можно поместить в архив запись с любым timestamp.

Так вот в моем архиве (он passive, если это имеет значение) выбрана мягкая сетка, но setVal помещает данные все равно как будто бы в привязке к жесткой сетке, не сильно обращая внимание на то, что передаваемый ему timestamp не соответствует условию 2).

Вопрос в том, правильно ли я понимаю что такое "мягкая" и "жесткая" сетка или же надо лучше читать документацию?

Вопрос 4.

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

Вопрос 5.
В дереве проекта есть возможность извлечь данные из архива в файл, причем, без ограничения в 100000 записей (см. скриншот ниже)
http://oscada.org/typo3temp/pics/8e7f8781e1.png

Есть ли доступ к этому функционалу через API?

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

[Сообщение редактировалось 2 раз(а), в последний раз 28.03.2021 в 20:08.]
Вложенный файл

arch.png (Тип файла: image/png, Размер: 374.24 килобайт) — 862 загрузок



3573