非常にまれにしか変更されないグローバル変数(シングルトン)が1つ必要です。実際には、アクターが再起動し、変数を再初期化したときにのみ変更されます。コンパニオンオブジェクトのシングルトンvalではこれを行うことができないため、var(可変)として宣言する必要があります。
object UserDatabase {
var dbConnection = "" // initializing db connection
}
私が読んだ多くのガイドラインは、常に可変状態の共有に反対しています。そこで、変数をクラスに移動し、メッセージパッシングを使用して変数を取得します。
class UserDatabase extends Actor{
val dbConnection = "" // initializing db connection locally
def receive = {case GetConnection => self.reply(dbConnection)}
}
問題は、dbConnectionは多くのアクターによって非常に頻繁にアクセスされ、メッセージを継続的に送信するとパフォーマンスが低下することです(akkaはメールボックスを1つずつ処理するため)。
パフォーマンスを犠牲にせずにこれを行う方法がわかりません。何か案が?