Безопасное параллелизмирование надежных коллекций Azure Service Fabric - PullRequest
0 голосов
/ 28 мая 2018

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

Как эффективно и одновременно преобразовать данные в IReliableDictionary в другую отсортированную коллекцию, такую ​​какчто я избегаю взаимных блокировок и не должен пересоздавать отсортированный список с нуля каждый раз, когда приходит новый заказ?

РЕДАКТИРОВАТЬ: После просмотра документации я считаю, что могу добиться этого, обновив свою отсортированную коллекцию локальной памятипосле обновления перед фиксацией.

        using (var tx = this.StateManager.CreateTransaction())
        {
            bool addOk = await orderDictionary.TryAddAsync(tx, 123, someOrderToAdd);
            if (addOk)
            {
                this.SortedOrders.Add(someOrderToAdd);
            }
            await tx.CommitAsync();
        }

Может ли кто-нибудь подтвердить, что мое понимание документации верно и что что-то подобное вышеописанной реализации не вызовет проблем параллелизма?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете использовать надежные коллекции уведомлений и хранить в отсортированном списке.Это гарантирует, что вы никогда не пропустите события, связанные со словарем.

0 голосов
/ 28 мая 2018

Если это только для времени жизни процесса, и если нет проблем иметь только Orders внутри раздела, возможно, вы можете использовать обычную одновременную коллекцию.Для примера , ConcurrentQueue<Order>.

Вы также можете использовать управляемый событиями подход , сигнализирующий о временной отметке OrderReceivedEvent каждый раз, когда принимается Order.Затем вы можете подписаться на эти события в отдельном сервисе, который хранит их где-то.

Или вы можете использовать распределенный кеш, такой как Redis Container ), чтобы сохранитьOrders временно.

Другим вариантом может быть использование сервера SQL для Order данных вместо надежных коллекций.

...