অ্যাসিক্রোনাস জেডিবিসি কল কি সম্ভব?


158

আমি ভাবছি যদি কোনও ডাটাবেসে অ্যাসিক্রোনাস কল করার কোনও উপায় থাকে?

উদাহরণস্বরূপ, কল্পনা করুন যে আমি একটি বড় অনুরোধ করেছি যা প্রক্রিয়া করতে খুব দীর্ঘ সময় নেয়, আমি অনুরোধটি প্রেরণ করতে চাই এবং একটি অনুরোধটি যখন অনুরোধটির কোনও মান (শ্রোতা / কলব্যাক বা কোনও কিছু পাস করে) ফেরত দেয় তখন আমি একটি বিজ্ঞপ্তি পেতে চাই। আমি উত্তর দিতে চাই না ডাটাবেস অপেক্ষা।

আমি বিবেচনা করি না যে থ্রেডের পুল ব্যবহার করা একটি সমাধান কারণ এটি স্কেল হয় না, ভারী সমবর্তী অনুরোধগুলির ক্ষেত্রে এটি খুব বড় সংখ্যক থ্রেডকে স্প্যান করবে।

আমরা নেটওয়ার্ক সার্ভারগুলির সাথে এই জাতীয় সমস্যার মুখোমুখি হয়েছি এবং সংযোগ প্রতি এক থ্রেড এড়াতে নির্বাচন / পোল / এপল সিস্টেম কল ব্যবহার করে সমাধানগুলি পেয়েছি। আমি কেবল ভাবছি কীভাবে ডাটাবেস অনুরোধের সাথে একই রকম বৈশিষ্ট্য থাকবে?

দ্রষ্টব্য: আমি সচেতন যে একটি ফিক্সডথ্রেডপুল ব্যবহার করা খুব ভাল কাজের কাজ হতে পারে তবে আমি অবাক হয়েছি যে কেউ সত্যই অ্যাসিঙ্ক্রোনাস (অতিরিক্ত থ্রেড ব্যবহার না করে) কোনও সিস্টেম তৈরি করেনি।

** আপডেট **
বাস্তব ব্যবহারিক সমাধানের অভাবের কারণে আমি নিজেই একটি লাইব্রেরি (ফিনাগলের অংশ) তৈরি করার সিদ্ধান্ত নিয়েছিলাম: ফাইনাগল-মাইএসকিএল । এটি মূলত মাইএসকিএল অনুরোধ / প্রতিক্রিয়াটিকে ডিকোড করে / ডিকোড করে এবং হুডের নীচে ফিনাগল / নেটটি ব্যবহার করে। এটি বিশাল সংখ্যক সংযোগ সহ এমনকি খুব ভাল স্কেল করে।




সমস্যাটি হল কীভাবে ডিবি ক্লায়েন্টকে অবহিত করতে পারে যখন কোয়েরি শেষ হবে। এর মধ্যে একটি (উদাহরণস্বরূপ) ওরাকলের জন্য "ডাটাবেস ক্যোয়ারী ফলাফল পরিবর্তন পরিবর্তন বিজ্ঞপ্তি" বৈশিষ্ট্যটি ব্যবহার করা এবং ডিবি ডেটা পরিবর্তনের সময় বিজ্ঞপ্তি পাওয়া উচিত। এটি এসকিউএল ক্যোয়ারীর জন্য প্রযোজ্য যা ডিবি ডেটা পরিবর্তন করে কেবল-পঠনযোগ্য অনুসন্ধানের জন্য এটি কাজ করবে না। অন্যদিকে আমি নিশ্চিত নই যে সংযোগ স্থাপন করা ব্যয়বহুল হওয়ায় সংযুক্তি তৈরি করা ভাল ধারণা হবে। অবশ্যই এটি খুব সাধারণ সমাধান নয়। চিন্তার জন্য কেবল খাদ্য ...
মাইক আরগেরিও

ফিঙ্গেল-মাইএসকিএল জেডিবিসি ব্যবহার করে?
সা Saeedদ জারিনফাম

উত্তর:


164

আমি বুঝতে পারছি না যে প্রস্তাবিত কোনও পদ্ধতির যেগুলি জেডিবিসিকে অভিনেতা, এক্সিকিউটর বা অন্য যে কোনও কিছুতে কল করে যাতে এখানে সহায়তা করতে পারে - কেউ কী স্পষ্ট করতে পারে y

অবশ্যই মূল সমস্যাটি হ'ল জেডিবিসি অপারেশনগুলি সকেট আইওতে ব্লক করে। এটি যখন এটি করে তখন এটি থ্রেডটিকে তার চলমান - গল্পের শেষে বাধা দেয়। আপনি যে কোনও মোড়ক কাঠামোটি বেছে বেছে বেছে বেছে বেছে বেছে এক থ্রেডে ব্যস্ত / অবরুদ্ধ রেখেছেন সহবর্তী অনুরোধ অনুসারে।

যদি অন্তর্নিহিত ডাটাবেস ড্রাইভারগুলি (মাইএসকিউএল?) সকেট তৈরিকে বিরত রাখার কোনও উপায় সরবরাহ করে (সকেটফ্যাক্টরি দেখুন) তবে আমি কল্পনা করি যে জেডিবিসি এপিআই-র উপরে একটি অ্যাসিঙ্ক ইভেন্ট চালিত ডাটাবেস স্তর তৈরি করা সম্ভব হবে তবে আমরা এনক্যাপসুলেট করতে চাই কোনও ইভেন্ট চালিত সম্মুখের পিছনে পুরো জেডিবিসি, এবং সেই সম্মুখভাগটি জেডিবিসির মতো লাগবে না (এটি ইভেন্টটি চালিত হওয়ার পরে)। ডাটাবেস প্রসেসিং কলারের কাছে আলাদা থ্রেডে অ্যাসিঙ্ক হয় এবং আপনাকে কীভাবে কোনও লেনদেন পরিচালক তৈরি করতে হবে যা থ্রেডের সান্নিধ্যে নির্ভর করে না।

আমি যে পদ্ধতির বিষয়ে উল্লেখ করেছি তার মতো কিছু এমনকি একটি একক পটভূমি থ্রেডকে সহবর্তী জেডিবিসি এক্সিকিউটের একটি লোড প্রক্রিয়া করার অনুমতি দেবে। অনুশীলনে আপনি সম্ভবত একাধিক কোর ব্যবহার করতে থ্রেডের একটি পুল চালাবেন।

(অবশ্যই আমি মূল প্রশ্নের যুক্তিতে মন্তব্য করছি না কেবল এমন প্রতিক্রিয়া যা বোঝায় যে সকেট ব্লক করা সকেটের সাথে একটি দৃশ্যে সম্মতিটি কোনও নির্বাচক প্যাটার্ন ব্যবহারকারীর ব্যতীত সম্ভব - কেবল আপনার সাধারণ জেডিবিসি সম্মতিতে কাজ করার জন্য সহজ) সঠিক আকারের একটি সংযোগ পুলে)।


দেখে মনে হচ্ছে যে মাইএসকিউএল সম্ভবত আমি প্রস্তাব করছি সেই রেখাগুলি বরাবর কিছু করে --- http://code.google.com/p/async-mysql-connector/wiki/UsageExample


1
আক্কা ব্যবহার করা রিলেশনাল ডিবিগুলিকে অ্যাসিঙ্ক্রোনাসে কল দেয় না। এটি আপনাকে সহজেই ডিবি অ্যাক্সেসের জন্য উত্সর্গীকৃত থ্রেডগুলিতে চালাতে দেয়। সাইটটি প্রতিক্রিয়াহীন হয়ে উঠলে আপনি পুরো সাইটটিকে নীচে নামবেন না কারণ আপনি সর্বদা সার্ভিস লেয়ারে ডিএও লেয়ার প্রতিশ্রুতি দিয়ে অ্যাসিঙ্ক কল করছেন এবং আপনার ওয়েব সার্ভারের থ্রেডগুলি আপনার বাকী অ্যাপ্লিকেশন থেকে পৃথক।
অনুর

অভিনেতারা কেবলমাত্র কাজের ক্ষেত্রই নন (উদাঃ মাইক্রো-সার্ভিসেস এবং অ্যাসিঙ্ক HT, যা আমরা প্রতি সেকেন্ডে কয়েক হাজারে স্কেল করি), এবং ক্লায়েন্টের দৃষ্টিকোণ থেকে অ-অ্যাসিনক্রোনাস হিসাবে আমি তাদের বরখাস্ত করতে এত তাড়াতাড়ি করব না। 1k UI 'তে থ্রেড ট্রাফিক আপনার সিস্টেমে প্রবেশ করে থাকেন এবং মাত্র 10 থ্রেড, ডিবি ব্লক করা হয় যখন 990 বার্তা' (বা এরকম অন্যকিছু) মেমরি queue'd হয় ছাড়া ব্লক কোনো 1k UI 'তে থ্রেড (যা সম্ভবত প্রকাশ করা হবে) দিয়ে। .. যে কি প্রয়োজন হয় না? আমি সত্যিকারের অ্যাসিঙ্ক জেডিবিসি দেখতে পছন্দ করব তবে এর অর্থ এই নয় যে অন্তর্বর্তীকালীন সময়ে খুব কার্যকরী কাজের সুযোগ নেই।
গ্রেগ পেন্ডলবারি

42

জেডিবিসির মাধ্যমে ডেটাবেজে অ্যাসিক্রোনাস কল করা অসম্ভব তবে আপনি অভিনেতাগণের সাথে জেডিবিসিতে অ্যাসিক্রোনাস কল করতে পারেন (উদাহরণস্বরূপ, অভিনেতা জেডিবিসির মাধ্যমে ডিবিতে কল করেন এবং তৃতীয় পক্ষগুলিতে বার্তা প্রেরণ করেন, কলগুলি শেষ হলে), বা, আপনি যদি পাইপলাইনযুক্ত ফিউচার (প্রতিশ্রুতি) সহ সিপিএস পছন্দ করেন (একটি ভাল বাস্তবায়ন স্কেলাজ প্রতিশ্রুতি )

আমি বিবেচনা করি না যে থ্রেডের পুল ব্যবহার করা একটি সমাধান কারণ এটি স্কেল হয় না, ভারী সমবর্তী অনুরোধগুলির ক্ষেত্রে এটি খুব বড় সংখ্যক থ্রেডকে স্প্যান করবে।

ডিফল্টরূপে স্কাল অভিনেতা ইভেন্ট-ভিত্তিক (থ্রেড-ভিত্তিক নয়) - ধারাবাহিকতার শিডিয়ুলিং একটি মানক জেভিএম সেটআপে কয়েক মিলিয়ন অভিনেতা তৈরি করতে দেয়।

আপনি যদি জাভা লক্ষ্য করে থাকেন তবে আক্কা ফ্রেমওয়ার্ক হল অভিনেতা মডেল বাস্তবায়ন যা জাভা এবং স্কালার উভয়ের জন্য একটি ভাল এপিআই রয়েছে।


এর বাইরে, জেডিবিসি-র সিঙ্ক্রোনাস প্রকৃতি আমার কাছে সঠিক ধারণা দেয়। জাভা থ্রেডটি ব্লক করা (পূর্ববর্তী বা ব্যাকগ্রাউন্ডে) ব্যয় করা এবং প্রতিক্রিয়ার জন্য অপেক্ষা করার চেয়ে ডাটাবেস সেশনের ব্যয় অনেক বেশি waiting যদি আপনার প্রশ্নগুলি এত দিন চালিত হয় যে কোনও এক্সিকিউটর পরিষেবার (বা রেকর্ডিং অ্যাক্টর / কাঁটাচামচা / প্রতিশ্রুতি সম্মতি ফ্রেমওয়ার্ক) এর ক্ষমতাগুলি আপনার পক্ষে যথেষ্ট না (এবং আপনি অনেকগুলি থ্রেড গ্রাস করছেন) আপনার প্রথমে আপনার সম্পর্কে চিন্তা করা উচিত ডাটাবেস লোড। সাধারণত একটি ডাটাবেস থেকে প্রতিক্রিয়া খুব দ্রুত ফিরে আসে, এবং একটি নির্ধারিত থ্রেড পুল সহ একটি এক্সিকিউটার পরিষেবা যথেষ্ট ভাল সমাধান। যদি আপনার অনেক দীর্ঘ-চলমান প্রশ্ন থাকে, তবে আপনাকে উপাত্ত (প্রাক-) প্রক্রিয়াজাতকরণ বিবেচনা করা উচিত - যেমন ডেটারি রাত্রে পুনঃ গণনা বা এর মতো কিছু।


2
@ ভিক্টর, ব্লকিং অপারেশনের (জেডিবিসি) সমান্তরালে কাজ করা প্রতিটি অভিনেতা একটি পৃথক থ্রেডে চালাবেন যা স্টিভ এড়াতে
চাইছিল

36
অভিনেতার পদ্ধতির জন্য এখনও সক্রিয় ডাটাবেস লেনদেনের জন্য প্রতিটি থ্রেডের প্রয়োজন, যখন লেনদেন চলছে, সুতরাং আপনি যদি সমান্তরাল ডাটাবেস লেনদেনের সংখ্যাকে সীমাবদ্ধ রাখতে এবং কিছু "অ্যাসিঙ্ক" ডাটাবেস ক্রিয়াকলাপ অপেক্ষা না করে থাকেন তবে ওপি'র সমস্যাটির এটি আসলেই সমাধান নয় unless কিছু ইতিমধ্যে কার্যকরকারীদের জন্য একটি থ্রেড সমাপ্ত এবং মুক্ত করতে free এটি একটি খারাপ ধারণা নয়, যদিও - আপনি যদি খুব বেশি সংযোগ খোলেন তবে ডাটাবেস ওভারলোড হয়ে যেতে পারে - সুতরাং আপনার HTTP অনুরোধ প্রক্রিয়াকরণ থ্রেডটি ব্লক না করে প্রক্রিয়াকরণের জন্য আপনার ডাটাবেস লেনদেনকে একটি কাতারে রেখে সহায়তা করবে।
ডাবিস ভান্ডারমির

8
অভিনেতা ভিত্তিক সমাধান এখনও থ্রেডটি ব্লক করে চলেছে। অ্যাসিঙ্ক জেডিবিসি কল চালানো সম্ভব নয় তা বলবেন না, পরীক্ষামূলক ওপেন সোর্স লাইব্রেরি রয়েছে যা এসিএনসি জেডিবিসি বাস্তবায়নের চেষ্টা করে।

6
+1 "জাভা থ্রেড ব্লক করা ব্যয়ের চেয়ে ডেটাবেস সেশনের ব্যয় অনেক বেশি"
পল ড্রাগার

1
ব্যয়বহুল ডিবি কলগুলির জন্য সাধারণত এত বড় সমস্যা হয় না। কলটি যখন তুচ্ছ হয় তখন নেটওয়ার্ক ওভারহেড একটি সমস্যা হয়ে যায়। আপনি যদি 100 টি ক্যুরিয় করতে চান, যা প্রতিটি ডিবিতে 1 এমএস লাগে তবে নেটওয়ার্কের ওভারহেড 200 এমএস হয়, তবে এটি 20 সেকেন্ডের সিঙ্ক্রোনিকভাবে নিতে চলেছে, তবে 300 মিমি অ্যাসিঙ্ক্রোনালি গ্রহণ করবে।
শোকে

12

সম্ভবত আপনি একটি জেএমএস অ্যাসিনক্রোনাস মেসেজিং সিস্টেম ব্যবহার করতে পারেন, যা বেশ ভাল স্কেল করে, আইএমএইচও:

  • কোনও কাতারে একটি বার্তা প্রেরণ করুন, যেখানে গ্রাহকরা বার্তাটি গ্রহণ করবে এবং এসকিউএল প্রক্রিয়াটি চালাবে। আপনার মূল প্রক্রিয়াটি চলতে থাকবে এবং নতুন অনুরোধ গ্রহণ বা প্রেরণ করা চালিয়ে যাবে।

  • এসকিউএল প্রক্রিয়াটি শেষ হয়ে গেলে, আপনি বিপরীতে চালাতে পারেন: প্রক্রিয়াটির ফলাফল সহ একটি রেসপন্সকিউতে একটি বার্তা প্রেরণ করুন, এবং ক্লায়েন্ট পক্ষের শ্রোতা এটি গ্রহণ করুন এবং কলব্যাক কোডটি কার্যকর করুন।


7

জেডিবিসিতে সরাসরি সমর্থন নেই তবে জাভা 5 থেকে আপনার কাছে এমডিবি, এক্সিকিউটার্সের মতো একাধিক বিকল্প রয়েছে।

"আমি মনে করি না যে থ্রেডের পুল ব্যবহার করা একটি সমাধান কারণ এটি স্কেল হয় না, ভারী সমবর্তী অনুরোধগুলির ক্ষেত্রে এটি খুব বড় সংখ্যক থ্রেড উত্থাপন করবে।"

আমি কৌতূহল যে কেন থ্রেডের একটি সীমাবদ্ধ পুল স্কেল হচ্ছে না? প্রতিটি অনুরোধ অনুসারে থ্রেড-প্রতি-অনুরোধের মতো একটি পুল নয়। আমি ভারী লোড ওয়েব অ্যাপে বেশ কিছুদিন ধরে এটি ব্যবহার করে আসছি এবং আমরা এখন পর্যন্ত কোনও সমস্যা দেখিনি।


আমি মনে করি যে থ্রেডগুলির বিরুদ্ধে মূল যুক্তিটি হ'ল আপনি মূলত কোনও মানক জাভা পাত্রে সীমাবদ্ধতার বাইরে থাকেন, সুতরাং আপনি ধারক পরিচালিত ক্লাস্টারিং হারাবেন এবং সক্ষমতায় ব্যর্থ হবেন, যদিও আপনি নিজের রোল করতে পারেন, বা টেরাকোটার মতো কিছু ব্যবহার করতে পারেন।
মেজমো

3
আমরা ওয়ার্ক ম্যানেজার ব্যবহার করে অ্যাপ সার্ভার পরিচালিত থ্রেড পোলে ট্যাপ করতে পারি। ওয়েবস্ফিয়ার, ওয়েবলোগিক এবং গ্লাসফিশ এটি সমর্থন করে
অরবিন্দ

5

দেখে মনে হচ্ছে একটি নতুন অ্যাসিনক্রোনাস জেডিবিসি এপিআই "জেডিবিসি নেক্সট" চলছে।

এখানে উপস্থাপনা দেখুন

আপনি এখান থেকে এপিআই ডাউনলোড করতে পারেন


1
একটি পুনঃনির্দেশিত লিঙ্ক আছে যা পয়েন্ট একটি আরো সাম্প্রতিক বাস্তবায়নে এখানে: oracle.com/goto/java-async-db
Remigius Stalder

4

অন্যান্য উত্তরে উল্লিখিত হিসাবে জেডিবিসি এপিআই এর প্রকৃতির দ্বারা অ্যাসিঙ্ক নয়।
তবে, আপনি যদি অপারেশনগুলির একটি উপসেট এবং একটি পৃথক এপিআই দিয়ে বাস করতে পারেন তবে এর সমাধান রয়েছে। একটি উদাহরণ https://github.com/jasync-sql/jasync-sql যা মাইএসকিউএল এবং পোস্টগ্রিসএসকিউএল জন্য কাজ করে।


3

আজাদবিসি প্রকল্প মনে হচ্ছে এই সমস্যার উত্তর দিচ্ছে http://code.google.com/p/adbcj/

মাইএসকিএল এবং পোস্টগ্র্যাস্কিলের জন্য বর্তমানে 2 টি পরীক্ষামূলক নেটিভ async ড্রাইভার রয়েছে।


আমি এই পদ্ধতির প্রস্তুত করতে চাই। জেডিবিসি শুরু থেকেই অনেকগুলি বিকশিত হয়েছে (পুনরাবৃত্তকারী, টেম্পলেট, প্রস্তুত পদ্ধতি), তবে এই অ্যাসিঙ্ক পদ্ধতির কখনও প্রয়োগ করা হয়নি। এটি রচনা অপারেশনের জন্য (সন্নিবেশ, আপডেট, মুছুন) বিশেষত আকর্ষণীয় হবে এবং বিশেষত সেই ভারী ব্যাচের টিএক্স আমাদের সবার মুখোমুখি হয়। আমার মতে, যে কোনও ধরণের ক্লায়েন্ট ভিত্তিক পদ্ধতির (পুলিং, অভিনেতা, সময়সূচী, মেসেজিং ...) রিসোর্স ব্যবহারের ক্ষেত্রে (সম্ভবত থ্রুপুট বা বিলম্বিত কিছু লাভ) এর ক্ষেত্রে সামান্য পুরষ্কারের দিকে নিয়ে যাবে।
জাইমে ক্যাসেরো

পুরানো এবং পরিত্যক্ত, মাত্র দুটি তথ্য প্রকার সমর্থিত এবং এমনকি উত্পাদন প্রস্তুতের কাছাকাছি নয়। দুর্ভাগ্যক্রমে :(
অ্যারন জিনম্যান

ইস্যু এই লাইব্রেরির # 1 ওয়েবসাইট পাওয়া যায় না হচ্ছে সম্পর্কে । এটি এক বছরেরও বেশি পুরানো। আমি সন্দেহ করি এই গ্রন্থাগারটি বেশ মারা গেছে।
লুকাস এদার

3

একটি পুরানো প্রশ্ন, তবে আরও কিছু তথ্য। নিজেই ডাটাবেসে জেডিবিসি ইস্যু করা সম্ভব নয়, যদি না কোনও বিক্রেতা জেডিবিসি-তে কোনও এক্সটেনশান সরবরাহ করে এবং জেডিবিসিকে হ্যান্ডেল করার জন্য একটি মোড়ক সরবরাহ করে না। এটি বলেছিল, জেডিবিসি নিজেই একটি প্রক্রিয়াজাতকরণ সারিতে আবৃত করা এবং যুক্তি প্রয়োগ করা সম্ভব যা এক বা একাধিক পৃথক সংযোগে সারির বাইরে চলে যেতে পারে। কিছু ধরণের কলের জন্য এর একটি সুবিধা হ'ল যুক্তি, যদি ভারী ভারী চাপের মধ্যে থাকে, কলগুলি প্রসেসিংয়ের জন্য জেডিবিসি ব্যাচে রূপান্তর করতে পারে, যা যুক্তিটিকে তাত্পর্যপূর্ণভাবে গতিময় করতে পারে। ডেটা isোকানো হচ্ছে এমন কলগুলির জন্য এটি সবচেয়ে কার্যকর এবং যদি কোনও ত্রুটি থাকে তবে প্রকৃত ফলাফলটি কেবল লগইন করা দরকার। এর দুর্দান্ত উদাহরণটি যদি ব্যবহারকারীর ক্রিয়াকলাপ লগ করতে সন্নিবেশগুলি করা হয়। অ্যাপ্লিকেশন জিতেছে '

পার্শ্ব নোট হিসাবে, বাজারে একটি পণ্য নীতিচালিত পদ্ধতির সরবরাহ করে যা আমি বর্ণিত ফোনগুলির মতো অ্যাসিক্রোনাস কলকে অ্যাসিক্রোনাসেই করা হতে পারে ( http://www.heimdalldata.com/ )। দাবি অস্বীকার: আমি এই সংস্থার সহ-প্রতিষ্ঠাতা। এটি কোনও জেডিবিসি ডেটা উত্সের জন্য সন্নিবেশ / আপডেট / মুছে ফেলার মতো ডেটা ট্রান্সফর্মেশন অনুরোধগুলিতে নিয়মিত এক্সপ্রেশনগুলিকে প্রয়োগ করার অনুমতি দেয় এবং প্রসেসিংয়ের জন্য এগুলিকে স্বয়ংক্রিয়ভাবে ব্যাচ করে দেবে। যখন মাইএসকিউএল এবং পুনর্লিখনপ্রাপ্ত স্টেটমেন্টস বিকল্পটি ব্যবহার করা হয় ( মাইএসকিউএল এবং জেডিবিসি পুনর্লিখনের সাথে জড়িত স্ট্যাটামেন্টস = সত্য ) এটি ডাটাবেসের সামগ্রিক লোডকে উল্লেখযোগ্যভাবে হ্রাস করতে পারে।


তবে এর অর্থ এখনও জেডিবিসির কমপক্ষে একটি পৃথক থ্রেড থাকা উচিত। ফ্রেমওয়ার্ক এবং স্ট্যাকগুলি সম্পর্কে কী যা একক থ্রেডযুক্ত তবে এখনও কলব্যাক ভিত্তিক (নোডজ মনে আসে)? আপনি কীভাবে জানেন যে তারা কীভাবে জেডিবিসি কল পরিচালনা করে?
ইয়ুরানোস

3

আমার মতে আপনার কাছে তিনটি বিকল্প রয়েছে:

  1. একটি ছোট এবং স্থির সংখ্যক থ্রেডে বার্তা বিতরণ করতে একযোগে সারি ব্যবহার করুন । সুতরাং আপনার যদি 1000 সংযোগ থাকে তবে আপনার 4 টি থ্রেড থাকবে, 1000 থ্রেড নয়।
  2. অন্য নোডে (যেমন অন্য একটি প্রক্রিয়া বা মেশিন) ডাটাবেস অ্যাক্সেস করুন এবং আপনার ডাটাবেস ক্লায়েন্টকে সেই নোডে অ্যাসিঙ্ক্রোনাস নেটওয়ার্ক কল করুন
  3. অ্যাসিনক্রোনাস বার্তাগুলির মাধ্যমে একটি সত্য বিতরণ ব্যবস্থা কার্যকর করুন। তার জন্য আপনার একটি মেসেজিং সারি যেমন কোরাল এমকিউ বা টিবকো দরকার হবে।

ডিক্লেইমার: আমি কোরাল কিউ এর অন্যতম বিকাশকারী।


3

স্ট্যান্ডার্ড রিলেশনাল ডাটাবেসগুলির মাধ্যমে প্রতিক্রিয়াশীল সংযোগকে সম্ভব করার জন্য একটি সমাধান তৈরি করা হচ্ছে।

I / O ব্লক করার উপর ভিত্তি করে বিদ্যমান মানগুলির কারণে রিলেশনাল ডাটাবেসের ব্যবহার বজায় রেখে স্কেল করতে ইচ্ছুক লোকেদের প্রতিক্রিয়াশীল প্রোগ্রামিং থেকে বিচ্ছিন্ন করা হয়। আর 2 ডিবিসি একটি নতুন এপিআই নির্দিষ্ট করে যা প্রতিক্রিয়াশীল কোডকে অনুমতি দেয় যা সম্পর্কিত ডেটাবেসগুলির সাথে দক্ষতার সাথে কাজ করে।

আর 2 ডিবিসি হ'ল এসকিউএল ডাটাবেসগুলির সাথে ডাটাবেস ড্রাইভার প্রয়োগকারী এবং ক্লায়েন্ট লাইব্রেরি লেখকদের জন্য একটি অ-ব্লকিং এসপিআই সংজ্ঞায়িত করে রিঅ্যাকটিভ প্রোগ্রামিংয়ের জন্য গ্রাউন্ড আপ থেকে ডিজাইন করা একটি স্পেসিফিকেশন। আর 2 ডিবিসি ড্রাইভাররা নন-ব্লকিং আই / ও স্তর শীর্ষে পুরোপুরি ডাটাবেস ওয়্যার প্রোটোকল প্রয়োগ করে।

আর 2 ডিবিসির ওয়েবসাইট

আর 2 ডিবিসির গিটহাব

বৈশিষ্ট্য ম্যাট্রিক্স

এখানে চিত্র বর্ণনা লিখুন


2

জাভা 5.0 নির্বাহক কুশলী লাগতে পারে।

দীর্ঘ-চলমান ক্রিয়াকলাপ পরিচালনা করতে আপনার কাছে একটি নির্দিষ্ট সংখ্যক থ্রেড থাকতে পারে। এবং এর পরিবর্তে Runnableআপনি ব্যবহার করতে পারেন Callable, যা ফলাফল দেয়। ফলাফলটি কোনও Future<ReturnType>বস্তুতে আবদ্ধ হয় , সুতরাং আপনি যখন এটি ফিরে আসেন তখন তা পেতে পারেন।


2

জাভাওনে উপস্থাপিত ওরাকল থেকে কোনও অ-ব্লক করা জেডিবিসি এপি কেমন দেখতে পারে সে সম্পর্কে একটি রূপরেখা এখানে দেওয়া হয়েছে: https://static.rainfocus.com/oracle/oow16/sess/1461693351182001EmRq/ppt/CONF1578%2020160916.pdf

সুতরাং দেখে মনে হচ্ছে শেষ পর্যন্ত সত্যই অ্যাসিনক্রোনাস জেডিবিসি কলগুলি সম্ভব হবে।


এটি জেডিবিসি নয় বরং একটি অতিরিক্ত এপিআই
ইয়্যাককব

2

কেবল একটি ক্রেজি ধারণা: আপনি কিছু ভবিষ্যত / প্রতিশ্রুতি দিয়ে জেবিডিসি ফলাফলসেটের উপরে একটি ইটারেটির প্যাটার্ন ব্যবহার করতে পারেন

হ্যামারস্মিথ মোঙ্গোডিবি-র জন্য এটি করে ।


1

আমি এখানে শুধু ধারণা চিন্তা করছি। প্রতিটি থ্রেড থাকার সাথে আপনার কেন ডেটাবেস সংযোগের পুল থাকতে পারে না। প্রতিটি থ্রেড একটি সারি অ্যাক্সেস আছে। আপনি যখন একটি ক্যোয়ারী করতে চান যা দীর্ঘ সময় নেয়, আপনি কাতারে লাগাতে পারেন এবং তারপরে কোনও একটি থ্রেড এটিকে বেছে নেবে এবং পরিচালনা করবে। আপনার থ্রেডের সংখ্যা সীমাবদ্ধ থাকায় আপনার কাছে কখনও বেশি থ্রেড থাকবে না।

সম্পাদনা: বা আরও ভাল, কেবল কয়েকটি থ্রেড। কোনও থ্রেড যখন কোনও কাতারে কিছু দেখে, তখন সে পুল থেকে সংযোগ চাইবে এবং পরিচালনা করে।


1

Commons-dbutils গ্রন্থাগার একটি জন্য সমর্থন আছে AsyncQueryRunnerযা আপনি একটি প্রদান ExecutorServiceকরতে এবং এটি একটি ফেরৎ Future। এটি ব্যবহার করা সহজ এবং আপনি সংস্থানগুলি ফাঁস করবেন না তা নিশ্চিত করার জন্য এটি মূল্যবান।


1

আপনি যদি জাভার জন্য অ্যাসিক্রোনাস ডাটাবেস এপিআইগুলিতে আগ্রহী হন তবে আপনার জানা উচিত যে কমপ্লেটেবল ফিউচার এবং ল্যাম্বডাসের উপর ভিত্তি করে স্ট্যান্ডার্ড এপিআইয়ের একটি সেট নিয়ে আসা একটি নতুন উদ্যোগ রয়েছে। জেডিবিসি-র উপরে এই এপিআইগুলির একটি বাস্তবায়নও রয়েছে যা এই এপিআইগুলির অনুশীলন করতে ব্যবহার করা যেতে পারে: https://github.com/oracle/oracle-db-example/tree/master/java/AoJ জাভাডকের রেডএমই-তে উল্লেখ করা হয়েছে গিথুব প্রকল্প

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.