У меня есть около 100 тысяч продуктов, которые я хочу сохранить в памяти. Эти продукты могут меняться с высокой скоростью в час, но в то же время чтение будет составлять большинство звонков, и может быть задержка с получением самой последней версии.
Я хочу создать 1 актера для каждого продукта, но иметь общее хранилище в памяти продукта.
Безопасно ли использовать concurrenthashmap и передавать его в качестве опоры для 100 000 актеров?
val products = new ConcurrentHashMap[ProductId, Product](initialCapacity)
Так что в моем Актер У меня будет что-то вроде:
def recieve = {
case GetProduct(id: ProductId) =>
// lookup in products concurrenthashmap, if not there, read from datastore and return
//
case UpdateProduct(id: ProductId) => ???
}
Когда есть обновления, может быть 100-500K в час. В обновлении может быть задержка, это не проблема. Таким образом, чтобы распространять обновления и предотвращать блокировки, я думаю, что по 1 субъекту на продукт. Я просто хочу сделать кеш глобальным для всех актеров.
Этот дизайн звучит?