Постановка задачи: у меня json обычно 15Kb-20Kb. Мне нужно замаскировать значения PII на уровне около 60 путей. Некоторые из путей также являются массивами. Итак, в итоге вы можете предположить около 80 путей (после рассмотрения массивов). Мне нужно сделать это в режиме реального времени с помощью пожарного рукава Kinesis.
Проблема в том, что 1 такой документ занимает 8 секунд в aws лямбде, чтобы замаскировать все поля и заменить значения sha256
Информация для бенчмаркинга:
используемые библиотеки: jsonpath-ng (это занимает время) и hashlib
лямбда-память = 128 МБ. (использует только 50 МБ, поэтому маловероятно)
Код:
platformS3Object = json.loads(base64.b64decode(record['data']).decode('utf-8'))
payload = json.loads(platformS3Object['message'])
routingKey = platformS3Object['metaData']['routingKey']
print("Routing Key:" + routingKey)
for jsonPath in fieldConfigurations[routingKey]:
jsonpath_expr = parse(jsonPath)
for match in jsonpath_expr.find(payload):
if isinstance(match.value, int):
jsonpath_expr.update(payload, (abs(hash(match.value)) % (10 ** 8)))
elif isinstance(match.value, str):
jsonpath_expr.update(payload, sha1(match.value.encode('UTF-8')).hexdigest())
platformS3Object['message'] = payload
output_record = {
'recordId': record['recordId'],
'result': 'Ok',
'data': base64.b64encode(json.dumps(platformS3Object).encode('utf-8')).decode('utf-8')
}
output.append(output_record)
Намерение:
Хотите добиться максимально быстрого маскирования, 8 секунд для документов 15 КБ кажется немного странно и очень медленно. Я ожидал, что это будет максимум на 500 мс, очень неприятно удивленный результатами. Пожалуйста, помогите мне улучшить время выполнения до наилучшего из возможных.