Настоящие секреты разработки в HCM
Настоящие секреты разработки в HCM
Предисловие / История в контексте ядра.
БАЗА ДАННЫХ. Постраничный доступ.
БАЗА ДАННЫХ. Условие с массивами идентификаторов.
БАЗА ДАННЫХ. Условие с массивами идентификаторов.
БАЗА ДАННЫХ. Потоковое открытие документов.
БАЗА ДАННЫХ. Потоковое открытие документов.
БАЗА ДАННЫХ. Составные запросы XQuery.
БАЗА ДАННЫХ. Составные запросы XQuery.
БАЗА ДАННЫХ. Массовые обновления документов.
БАЗА ДАННЫХ. Массовые обновления документов.
БАЗА ДАННЫХ. Особенности работы c PostgreSQL.
Данные в памяти. Низкоуровневые функции.
Данные в памяти. Низкоуровневые функции.
Веб-сокеты.
Очереди.
Оценка производительности и отладка.
Оценка производительности и отладка. Коллекции карт вызовов.
Будущее…
1.33M

Настоящие секреты разработки в HCM

1. Настоящие секреты разработки в HCM

НАСТОЯЩИЕ
СЕКРЕТЫ
РАЗРАБОТКИ В HCM
«СЕКРЕТОВ» НА САМОМ ДЕЛЕ НЕТ, ЕСТЬ «КОСТЫЛИ», Т.Е. КОМПРОМИССЫ.
30-31 марта 2023
AZIMUT Сити Отель Олимпик Москва

2. Настоящие секреты разработки в HCM

НАСТОЯЩИЕ СЕКРЕТЫ РАЗРАБОТКИ В HCM
База данных
Данные в памяти
Веб сокеты
Очереди
Оценка производительности и отладка
Будущее

3. Предисловие / История в контексте ядра.

ПРЕДИСЛОВИЕ / ИСТОРИЯ В КОНТЕКСТЕ ЯДРА.
Cluster
Azure Cloud
Azure SQL
Memory Cache
Fulltext index
2009 - 2012
64bit
.Net 3.4/4.0 COM
SPXML UNIBRIDGE
1.2
MSSQL / ORACLE
2008
xhttp kernel
2005
Linux
Deep .Net Integration
PostgreSQL
Redis
Queues
XQuery Extensions
2013-2018
.Net 6/7
Inventa Client
IDM
Mediasoup Embedded
VFS
Yandex Cloud
2019 - 2023

4. БАЗА ДАННЫХ. Постраничный доступ.

// Перебор
var xq = XQuery(“for $elem in collaborators
order by $elem/id return $elem”);
// Постраничный доступ
var xq = XQuery(“for $elem in collaborators order
by $elem/id return $elem”,”PageSize=10”);
for (xqi in xq)
for (xqi in ArrayRange(xq,startPos,pageSize))
{
{


Response.Write(xqi.id);
}
Response.Write(xqi.id);
}

5. БАЗА ДАННЫХ. Условие с массивами идентификаторов.

//Стандартный массив идентификаторов
//Специальный массив идентификаторов
var xq = XQuery(“for $elem in collaborators
where MatchSome($elem/id,(id1,id2,….idn))
var xq = XQuery(“for $elem_qc in collaborators
order by $elem/id return $elem”);
order by $elem_qc/id return
$elem”,”PageSize=10”);
for (xqi in xq)
for (xqi in ArrayRange(xq,startPos,pageSize))
{
{
where MatchSome($elem_qc/id,(id1,id2,….idn))


Response.Write(xqi.id);
}
Response.Write(xqi.id);
}

6. БАЗА ДАННЫХ. Условие с массивами идентификаторов.

Ограничения:
• Никаких функций в MatchSome
• Никаких составных XQuery
• Нет параметризации запросов

7. БАЗА ДАННЫХ. Потоковое открытие документов.

// Прямое открытие документов
var xq = XQuery(“for $elem_qc in collaborators
where MatchSome($elem_qc/id,(id1,id2,….idn))
// Потоковое открытие документов
var xq = XQuery(“for $elem_qc in collaborators
where MatchSome($elem_qc/id,(id1,id2,….idn))
order by $elem_qc/id,$elem/__data return $elem”);
order by $elem_qc/id return $elem”);
for (xqi in xq)
for (xqi in xq)
{
{
var doc = OpenDoc(UrlFromDocID(xqi.id))
var doc = OpenDoc(UrlFromDocID(xqi.id))


Response.Write(xqi.id);
}
Response.Write(xqi.id);
}

8. БАЗА ДАННЫХ. Потоковое открытие документов.

Ограничения:
• Работает только для цикла for
• Функция OpenDoc должна быть первой операцией с базой в
цикле
• Никаких вложенных XQuery
• Несовместим с ArrayRange

9. БАЗА ДАННЫХ. Составные запросы XQuery.

// Составные запросы XQuery
var xq = XQuery(“for $cl in collaborators, $gc in group_collaborators
where $cl/id=$gc/collaborator_id order by $cl/fullname
return $cl/id,$cl/fullname,$cl/code cl_code,$gc/code gc_code”);
for (xqi in xq)
{

Response.Write(xqi.cl_code);
Response.Write(xqi.gc_code);
}

10. БАЗА ДАННЫХ. Составные запросы XQuery.

Ограничения:
• Работает только для spxml unibridge
• XQuery может быть только составным.

11. БАЗА ДАННЫХ. Массовые обновления документов.

// Прямое обновление документов
// Массовое обновление документов
var xqc = XQuery("for $elem in
collaborators return
$elem/Fields('id','__data')");
for (xqi in xqc)
var xqc = XQuery("for $elem in collaborators return
elem/Fields('id’,’__data’)");
{
{
}
tools.spxml_unibridge.Object.provider.BeginBulkAtomic
Operation(1000);
for (xqi in xqc)
doc = OpenDoc(UrlFromDocID(xqi.id));
doc = OpenDoc(UrlFromDocID(xqi.id));
doc.TopElem.org_id = org_id;
doc.TopElem.org_id = org_id;
doc.Save();
doc.Save();


}
tools.spxml_unibridge.Object.provider.EndBulkAtomicO
peration();

12. БАЗА ДАННЫХ. Массовые обновления документов.

Ограничения:
• Работает только для spxml unibridge
• Все операции внутри блока
BeginBulkAtomicOperation/EndBulkAtomicOperation
обновляются в одной транзакции, поэтому запросы к
каталогам могут быть не корректными.

13. БАЗА ДАННЫХ. Особенности работы c PostgreSQL.

Ограничения:
• Для XQuery требуется корректные типы параметров в
условиях.
• Многозначные поля имеют содержат тип массив, а не xml

14. Данные в памяти. Низкоуровневые функции.

Высокоуровневые функции: setuserdata / getuserdata
Низкоуровневые функции:
Скалярные:
Get(key,region)
Put(key,object,expire,region)
Remove(key,region)
GetOrSet(key,value,expire,region)
SetExpiration(key,expire,region)
Векторные:
PutSet(key,value,region)
GetSet(key,region)
AddToSet(key,value,region)
RemoveFromSet(key,value,region)
RemoveSet(key,value,region)

15. Данные в памяти. Низкоуровневые функции.

Ограничения:
• Работают только с примитивными сериализуемыми
типами spxml: int,string,real,int[],string[],real[]
• Кэш может быть подвергнут принудительному
освобождению, как локальный, так и redis.

16. Веб-сокеты.

Для реализации требуется:
Соглашение для реализации веб-сокета.
service.xml – декларация web-service с методами accept/process/close
service.js – реализация методов accept/process/close
Код для потребления сервиса на стороне клиента.
Возможна также запись в сокеты на стороне на одном или нескольким узлов HCM.
Сервисные функции для работы с сокетами:
context = CurrentWebSocketContext
context.WebSocketCurrentId
context.WebSocketReceiveResultValue
GetWebSockets()
WriteToWebSocketMessageQueue(socketId, message, json_compound)
WriteToWebSocketsArrayMessage(socketIds, message, parallel_degree, exclude_own);
WriteToWebSocketsMessageQueueArray(socketIds, message, json_compound, parallel_degree,
exclude_own)

17. Очереди.

Известные часто-используемые функции:
PutMessageInQueue(queue_name, message, region)
GetMessageFromQueue (queue_name, region)
Редко используемые функции:
• PeekMessagesFromQueue(queue_name, region, start, stop)
• PutMessageInQueue(queue_name, message, region, ttl, reserved, unique, channel,
channel_message)
• ClearMessagesInQueue(queue_name, region)
• QueueIndexOf(queue_name, message, region)
• QueueRemoveMessage(queue_name, message);
• QueueTrim(queue_name, start, stop, region)
• CompactMessageQueue(queue_name, region)
• PeekMessagesFromQueue(queue_name, region, start, stop)
• Subscribe(channel, func_handler, region)/Unsubscribe(channel, region)/IsSubscribed(channel, region)

18. Оценка производительности и отладка.

Отладка пока только «принтами».
В x-shell это команды для включения журналов диагностики: debug ?
В xHttp.ini | spxml_unibridge_config.xml это параметры для ведения журналов диагностики.
debug dotnet on|off
debug vfs on|off
DOTNETCORE-DEBUG: 0|1
DOTNETCORE-DEBUG-VFS: 0|1
debug http on|off
debug all on|off
DOTNETCORE-XHTTP-DEBUG: 0|1
DOTNETCORE-XHTTP-DEBUG-CANCELLED: 0|1
DOTNETCORE-XHTTP-DEBUG-CONTROL-WEBSOCKETS: 0|1
DOTNETCORE-XHTTP-DEBUG-WEBSOCKETS-BODY: 0|1
DOTNETCORE-XHTTP-DEBUG-WEBSOCKETS-BODY-LEN: 256
DOTNETCORE-DEBUG-INVOKE-GLOBAl-ENV: 0|1
DOTNETCORE-DEBUG-NEURAL: 0|1
DOTNETCORE-DEBUG-MEDIA: 0|1
debug http on|off
DOTNETCORE-XHTTP-DEBUG: 0|1
debug spxml on|off
spxml_unibridge_config.xml
Mode: Normal|Debug
CacheDebug: On

19. Оценка производительности и отладка. Коллекции карт вызовов.

Старт / Стоп
xsh> collect callmap on|off
Информация по аргументам:
xsh> collect ?
Настройки для файлов коллекций:
CALL-MAP-DIR: call-maps
CALL-MAP-BUFFER-SIZE: 134217728
CALL-MAP-MAX-FILE-SIZE: 268435456
CALL-MAP-MAX-STR-ARG-SIZE: 256

20. Будущее…

База данных: OpenSearch, YDB, Mongo?
Данные в памяти: Балансировка на N узлов
Веб сокеты: SignalR
Очереди: Возврат в очередь, RabbitMQ, YMQ
Отладка: VSCode Debugger Adapter, NetTrace

21.

Вопросы
И может быть ответы…
English     Русский Rules