sql >> データベース >  >> NoSQL >> MongoDB

一意の顧客IDに基づく同期にJava文字列プールを使用する必要がありますか?

    文字列が十分に一意である場合(たとえば、暗号化ハッシュを介して生成された場合)、クライアントIDでの同期はおそらく動作しますString.intern()を呼び出す限り それらに最初に。 IDは一意であるため、IDを他のモジュールに渡さない限り、他のモジュールと競合する可能性はほとんどありません。 彼らは彼らをロックするという悪い習慣に従います。

    そうは言っても、それはおそらく悪い考えです。他の誰かが同じStringをロックした場合、ある日不必要な競合が発生する可能性がわずかにあります。 たとえば、主な問題は、intern()を実行する必要があることです。 すべてのString オブジェクト。これは、文字列インターンテーブルのネイティブ実装、固定サイズなどが原因でパフォーマンスが低下することがよくあります。本当にStringのみに基づいてロックする必要がある場合 、Guavaの Interners.newWeakInterner() インターネットの実装。パフォーマンスが大幅に向上する可能性があります。組み込みのStringとの衝突を避けるために、文字列を別のクラスでラップします ロック。そのアプローチの詳細この回答 。

    それ以外にも、セッションオブジェクトのロックなど、ロックする別の自然なオブジェクトが存在することがよくあります。

    これは、この質問 と非常によく似ています。 より具体的な答えがあります。

    ...または、少なくとも、衝突の可能性を十分に低くするのに十分なビットがあり、クライアントIDが攻撃対象領域




    1. mongodbからのすべてのデータを表示し、doT.jsテンプレートエンジンでレンダリングします

    2. マングースの状態を設定することは可能ですか

    3. MongoDBpullAllにドキュメントの順序を無視させる方法

    4. MongoDB:1つのフィールドのすべてのドキュメントを更新します