इस समस्या का मेरे पास और कौन सा समाधान है?
LISTEN
का प्रयोग करें और NOTIFY
अपने ऐप को यह बताने के लिए कि चीजें बदल गई हैं।
आप NOTIFY
भेज सकते हैं एक ट्रिगर से जो कतार तालिका में परिवर्तनों को भी रिकॉर्ड करता है।
आपको एक PgJDBC कनेक्शन की आवश्यकता होगी जिसने एक LISTEN
. भेजा हो आप जिस ईवेंट का उपयोग कर रहे हैं उसके लिए। इसे समय-समय पर खाली प्रश्न भेजकर डेटाबेस को मतदान करना चाहिए (""
) यदि आप एसएसएल का उपयोग कर रहे हैं; यदि आप एसएसएल का उपयोग नहीं कर रहे हैं तो एसिंक अधिसूचना जांच के उपयोग से इसे टाला जा सकता है। आपको Connection
को खोलना होगा अंतर्निहित कनेक्शन को PgConnection
. में डालने में सक्षम होने के लिए अपने कनेक्शन पूल से ऑब्जेक्ट करें सुनने/सूचित करने का उपयोग करने के लिए। संबंधित उत्तर देखें
निर्माता/उपभोक्ता बिट कठिन होगा। PostgreSQL में कई क्रैश-सुरक्षित समवर्ती उपभोक्ताओं के लिए आपको pg_try_advisory_lock(...)
के साथ एडवाइजरी लॉकिंग का उपयोग करने की आवश्यकता है . यदि आपको समवर्ती उपभोक्ताओं की आवश्यकता नहीं है तो यह आसान है, आप बस SELECT ... LIMIT 1 FOR UPDATE
एक बार में एक पंक्ति।
उम्मीद है कि 9.4 में लॉक पंक्तियों को छोड़ने का एक आसान तरीका शामिल होगा FOR UPDATE
, क्योंकि इसके लिए विकास कार्य चल रहा है।