2016-11-11 4 views
0

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

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

Моей первой предпосылкой было создание таблицы для каждого клиента (Audits_CustomerXXX) и использование в качестве ключа раздела идентификатора объекта и строки строки (DateTime.Max.Ticks - DateTime.Now.Ticks) .ToString ("D19") стоимость. И это отлично работает, когда мой вопрос заключается в том, что случилось с определенной сущностью? Например, аудит покупки будет иметь PartitionKey = «Покупки/12345» и RowKey как временную метку.

Но когда я хочу увидеть птичий глаз у всего клиента, могу ли я просто запросить сортировку таблицы по строке по разделам? Или лучше создать вторичную таблицу для хранения данных с помощью разных разделов? Также при использовании (DateTime.Max.Ticks - DateTime.Now.Ticks) .ToString («D19») есть способ предотвратить ошибки, когда два действия в одном разделе происходят в одном тике (маловероятно, но кто знает .. .).

Благодаря

+0

Можете ли вы описать, что вы подразумеваете под идентификатором объекта? –

+0

Да, это строковый идентификатор, похожий на «картинки/1234» или «покупка/5221». –

+0

Еще один вопрос: что касается вида птичьего глаза, вы хотели бы видеть все действия между определенными диапазонами дат/времени. Это верно? –

ответ

1

Можно, конечно, создать отдельную таблицу для высоты птичьего полета, но вы действительно не должны. Учитывая, что таблицы Azure не имеют схемы, вы можете сохранить эти данные в одной таблице. Вы бы сохранили PartitionKey как обратные тики и RowKey как идентификатор объекта. Поскольку вы будете запрашивать только PartitionKey, вы также можете сохранить RowKey в качестве GUID. Это гарантирует, что все объекты уникальны. Или вы можете добавить GUID в свой идентификатор объекта и использовать его как RowKey.

Однако имейте в виду, что, поскольку вы вставляете два объекта с различными значениями PartitionKey, вам необходимо будет защитить ваш код от возможных сбоев сети, поскольку каждая запись будет отдельным запросом к службе таблицы. Как мы справляемся с этим в нашем приложении, мы записываем эту полезную нагрузку в сообщение очереди, а затем обрабатываем это сообщение через фоновый процесс.