Сжать строку в Apex и распаковать ее на python

#python #salesforce #apex

#python #salesforce #apex

Вопрос:

В Salesforce мы запускаем событие платформы и добавляем полезную нагрузку в поле Payload__c (LongText) к этому событию платформы.

Мы создали потоковый клиент на python, который подписывается на это событие платформы и использует полезную нагрузку.

Поскольку иногда полезная нагрузка довольно большая, нам пришла в голову идея сжимать на стороне salesforce и распаковывать полезную нагрузку на стороне python.

Мы нашли библиотеку https://github.com/bilalfastian/LZ4String для Апекса. Итак, что мы сейчас делаем, это сжимаем полезную нагрузку с помощью метода: compressstobase64(полезная нагрузка) и сохраняем ее как base64 в событии платформы.

В python мы пробовали по-разному, но мы не смогли распаковать. Пример с библиотекой https://github.com/eduardtomasek/lz-string-python:

В Apex:

 String test = 'Hello world';
String comp = LZString.compressToBase64 (test);
System.debug(comp);

// Output is 0oXjgLbmg7ZA7rqQ4pyw04gA
  

Теперь я пытаюсь распаковать эту строку в python:

 base64_message = '0oXjgLbmg7ZA7rqQ4pyw04gA'
w=x.decompresFromBase64(base64_message)
logger.error(w)

Output is just: -
  

Комментарии:

1. Вы проводили тесты, чтобы подтвердить, что сжатие добавляет здесь какую-либо ценность? Обратите внимание, что ваш пример base64 потребляет больше байтов, чем фактическое сообщение. Вы также потеряете производительность, пытаясь выполнять побитовые манипуляции в Apex, что очень плохо подходит для этой задачи.

2. Привет, Дэвид, да, мы это сделали. Было примерно на 50% меньше данных