হাইবারনেট দ্বিতীয় স্তরের ক্যাশে কখন এবং কীভাবে ব্যবহার করবেন?


90

হাইবারনেট যখন দ্বিতীয় স্তরের ক্যাশে আঘাত করে এবং কখন এটি ক্যাশেটিকে অকার্যকর করে তা বুঝতে আমার সমস্যা হয়।

আমি বর্তমানে এটিই বুঝতে পারি:

  • দ্বিতীয় স্তরের ক্যাশে সেশনগুলির মধ্যে সত্তা সংরক্ষণ করে, সুযোগটি সেশনফ্যাক্টরি
  • আপনাকে বলতে হবে কোন সংস্থাটি ক্যাশে যাবে, কোনও সত্তা ডিফল্টরূপে ক্যাশে হবে না
  • ক্যোয়ারী ক্যাশে ক্যাশগুলিতে প্রশ্নের ফলাফল সংরক্ষণ করে।

আমি যা বুঝতে পারি না তা হ'ল

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

নাকি আমি ভাবছি ক্যাশে সম্পূর্ণ ভুল? সেক্ষেত্রে দ্বিতীয় স্তরের ক্যাশের আরও উপযুক্ত ব্যবহার কী হবে? হাইবারনেট ডকুমেন্টেশন ক্যাশে বাস্তবে কীভাবে কাজ করে তা মোটেও পরিষ্কার নয়। এটি কীভাবে সেট আপ করা যায় সে সম্পর্কে কেবলমাত্র নির্দেশাবলী রয়েছে।

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


উত্তর:


101

সবার আগে, প্রসেস লেভেল ক্যাশে (বা ২ য় স্তরের ক্যাশে যেমন তারা হাইবারনেটে ডাকবে) সে সম্পর্কে কথা বলি। এটি কাজ করতে, আপনার উচিত

  1. ক্যাশে সরবরাহকারী কনফিগার করুন
  2. ক্যাশে কী সত্তা হাইবারনেট বলুন (আপনি যদি এই ধরণের ম্যাপিং ব্যবহার করেন তবে hbm.xML ফাইলে ডানদিকে)।

আপনি ক্যাশে সরবরাহকারীকে বলুন এটির কতটি বস্তু সংরক্ষণ করা উচিত এবং কখন / কেন সেগুলি অবৈধ করা উচিত। সুতরাং আসুন আমরা আপনার কাছে একটি বই এবং একটি লেখক সত্ত্বা রাখি, প্রতিবার আপনি ডিবি থেকে এগুলি পাচ্ছেন, কেবল ক্যাশে নেই এমন ব্যক্তিরা আসলে ডিবি থেকে নির্বাচিত হবে। এটি কর্মক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি করে। এটি কার্যকর যখন:

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

তাহলে ক্যাশে কখন কাজ করে?

  • আপনি session.get()বা session.load()বস্তুটি যা আগে নির্বাচিত হয়েছিল এবং যখন ক্যাশে থাকে। ক্যাশে একটি স্টোরেজ যেখানে আইডি মূল এবং বৈশিষ্ট্যগুলি মান। সুতরাং কেবলমাত্র যখন আইডি দিয়ে অনুসন্ধান করার কোনও সম্ভাবনা থাকে আপনি কেবল ডিবিটিকে আঘাত করতে পারেন।
  • যখন আপনার সমিতিগুলি অলস-বোঝা হয় (বা যোগদানের পরিবর্তে নির্বাচনগুলি নিয়ে আগ্রহী-বোঝা থাকে)

তবে এটি কার্যকর হয় না যখন:

  • আপনি যদি আইডি দ্বারা নির্বাচন না করেন। আবার - ২ য় স্তরের ক্যাশে সত্ত্বার আইডির মানচিত্রকে অন্য বৈশিষ্ট্যগুলিতে সঞ্চয় করে (এটি আসলে বস্তুগুলি সঞ্চয় করে না, তবে ডেটা নিজেই), তাই যদি আপনার খোঁজখবরটি এইরকম দেখাচ্ছে: from Authors where name = :nameতবে আপনি ক্যাশে আঘাত করবেন না।
  • আপনি যখন এইচকিউএল ব্যবহার করেন (আপনি যদি ব্যবহার করেন তবেও where id = ?)।
  • যদি আপনার ম্যাপিংয়ে আপনি সেট করেন fetch="join"তবে এর অর্থ এই যে অ্যাসোসিয়েশনগুলি লোড করার জন্য পৃথক নির্বাচনী বিবৃতিগুলির পরিবর্তে সর্বত্র ব্যবহৃত হবে। প্রক্রিয়া স্তরের ক্যাশে কেবলমাত্র যদি fetch="select"ব্যবহৃত হয় তবে শিশুদের অবজেক্টগুলিতে কাজ করে ।
  • এমনকি যদি আপনার fetch="select"এইচকিউএল থাকে তবে আপনি অ্যাসোসিয়েশনগুলি নির্বাচন করতে যোগদান করেন - সেই সাথে যোগ দেওয়া তত্ক্ষণাত জারি করা হবে এবং আপনি এইচবিএম.এক্সএমএল বা টীকাগুলিতে যা নির্দিষ্ট করেছেন সেগুলি ওভাররাইট করে দেবে।

এখন ক্যোয়ারী ক্যাশে আপনার লক্ষ করা উচিত যে এটি পৃথক ক্যাশে নয়, এটি প্রক্রিয়া স্তর ক্যাশেতে একটি সংযোজন। ধরা যাক আপনার একটি দেশ সত্তা আছে। এটি স্থিতিশীল, সুতরাং আপনি জানেন যে প্রতিবার যখন আপনি বলবেন একই ফলাফল সেট হবে from Country। এটি ক্যোয়ারী ক্যাশের জন্য নিখুঁত প্রার্থী, এটি আইডির একটি তালিকা নিজের মধ্যে সংরক্ষণ করবে এবং আপনি যখন পরবর্তী সময় সমস্ত দেশ নির্বাচন করবেন তখন এটি এই তালিকাটি প্রক্রিয়া স্তরের ক্যাশে ফিরিয়ে দেবে এবং পরবর্তীতে প্রতিটি আইডির জন্য বস্তুগুলি ফিরিয়ে দেবে will যেহেতু এই বিষয়গুলি ইতিমধ্যে দ্বিতীয় স্তরের ক্যাশে সঞ্চিত রয়েছে। সত্তা পরিবর্তনের সাথে সম্পর্কিত অনুসন্ধানের ক্যাশেটি প্রতিবার অবৈধ হয়। সুতরাং আসুন আমরা from Authorsজিজ্ঞাসা করি আপনি ক্যোয়ারী ক্যাশে রাখার জন্য কনফিগার করেছেন । লেখক প্রায়শই পরিবর্তিত হওয়ায় এটি কার্যকর হবে না।


"লেখকের কাছ থেকে একটি ফেচ a.books এ যোগ দেয়" ক্যোয়ারিতে ক্যাশে থেকে লেখক আনতে কোয়েরি ক্যাশে দরকার?
palto

4
না, ক্যোয়ারী ক্যাশে কেবল স্থির ডেটার জন্য এবং এটি কেবল আইডি সঞ্চয় করে। লেখকদের দ্বিতীয় স্তরের ক্যাশে থেকে নেওয়া হবে।
স্টানিস্লাভ বাশকির্তসেভ

@ctapobep: আপনি যা বলছেন তা সত্য নয়! "লেখক থেকে একটি আনা a.books যোগদানের" উত্তম কাজ করে এর সত্তা লেখক ক্ষেত্র বই সটীক হয় (আগ্রহী আনা) ... এটা খুব দেরি আমি মনে করি
বিলাল হন তবে আপনার

এমন দুর্দান্ত উত্তর! আমি সব সময় মনে রাখবেন! : d
মোহাম্মদরেজা খাতামি 20'18

'ক্যোয়ারী ক্যাশে' সক্ষম করার পরে, আপনি আইডি বাদে অন্য সম্পত্তি দ্বারা নির্বাচন করা হলে তা ক্যাশে থেকে ডেটা আনে?
অরুণরাজ

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

বাস্তবে কী-মূল্যের বিতরণ করা ক্যাশে রাখা কার্যকর - যা মেমক্যাচ করা হয়, এবং এটি ফেসবুক, টুইটার এবং আরও অনেক কিছুকে ক্ষমতা দেয় powers তবে আইডির মাধ্যমে যদি আপনার অনুসন্ধান না থাকে তবে এটি খুব কার্যকর হবে না।


12

পার্টিতে দেরীতে হয়েছিলেন তবে অনেকগুলি বিকাশকারী জিজ্ঞাসা করেন এমন প্রশ্নগুলির পদ্ধতিগতভাবে উত্তর দিতে চেয়েছিলেন।

আপনার প্রশ্ন এক এক করে এখানে নেওয়া আমার উত্তর is

প্র: হাইবারনেট কখন এই ক্যাশে আঘাত করে?

উ: প্রথম স্তরের ক্যাশে সঙ্গে যুক্ত করা হয় সেশন বস্তুরদ্বিতীয় স্তর ক্যাশে সঙ্গে যুক্ত করা হয় সেশন কারখানার বস্তুর । প্রথমটিতে যদি বস্তুটি পাওয়া যায় না, তবে দ্বিতীয় স্তরটি চেক করা হয়।

প্র: ধরা যাক আমি দ্বিতীয় স্তরের ক্যাশে সেট আপ করেছি তবে ক্যোয়ারী ক্যাচিং নয়। আমি আমার গ্রাহকদের ক্যাশে রাখতে চাই, তাদের মধ্যে 50000 আছে। কীভাবে আমি ক্যাশে থেকে গ্রাহকদের পুনরুদ্ধার করতে পারি?

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

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

উ: উপরে উত্তর দেওয়া।

প্র: কোয়েরি ক্যাচিং অক্ষম করা থাকলে আমি কীভাবে আমার সমস্ত গ্রাহক পেতে পারি?

উ: উপরে উত্তর দেওয়া।

প্র: গ্রাহকদের মধ্যে কেউ আপডেট করলে কী হবে? সেই গ্রাহক কী ক্যাশে অবৈধ হয়ে যাবেন বা সমস্ত গ্রাহক অবৈধ হয়ে যাবেন?

উ: হাইবারনেটের কোনও ধারণা নেই তবে আপনি হাইবারনেট দ্বিতীয় স্তরের ক্যাশে হিসাবে প্রয়োগ করতে এবং তাদের অবৈধ করতে অন্য তৃতীয় পক্ষের আইএমডিজি / বিতরণ করা ক্যাচগুলি ব্যবহার করতে পারেন । উদাহরণস্বরূপ তাইজগ্রিড এমন একটি পণ্য এবং আমার ধারণা আরও আছে।


0

হাইবারনেট দ্বিতীয় স্তরের ক্যাশে বুঝতে এবং বাস্তবায়ন করার জন্য কিছুটা জটিল। আপনার প্রশ্নের ভিত্তিতে আমরা যা বলতে পারি তা এখানে:

হাইবারনেট কখন এই ক্যাশে আঘাত করে?

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

ধরা যাক আমি দ্বিতীয় স্তরের ক্যাশে সেট আপ করেছি তবে ক্যোরি ক্যাচিং নয়। আমি আমার গ্রাহকদের ক্যাশে রাখতে চাই, তাদের মধ্যে 50000 আছে। কীভাবে আমি ক্যাশে থেকে গ্রাহকদের পুনরুদ্ধার করতে পারি?

এই ব্যবহারের ক্ষেত্রে ক্যোয়ারী ক্যাচিং সেরা হবে, যেহেতু গ্রাহকের ডেটা স্থিতিশীল এবং একটি সম্পর্কিত ডেটাবেস থেকে প্রাপ্ত।

কেউ যদি গ্রাহকের একজনকে আপডেট করে তবে কী হবে? সেই গ্রাহক কী ক্যাশে অবৈধ হয়ে যাবেন বা সমস্ত গ্রাহক অবৈধ হয়ে যাবেন?

এটি আপনি যে নির্দিষ্ট হাইবারনেট ক্যাশে কৌশলটি ব্যবহার করছেন তার উপর নির্ভর করে। হাইবারনেটে আসলে চারটি আলাদা ক্যাশে কৌশল রয়েছে:

পুনরুক্তি : ক্যাশে ভিতরে একবারে অবজেক্টগুলি পরিবর্তন হয় না।

NONSTRICT_READ_WRITE : সম্পর্কিত ডাটাবেস এন্ট্রি আপডেট হওয়ার পরে অবজেক্টস পরিবর্তিত হয় (অবশেষে); এটি চূড়ান্ত ধারাবাহিকতার গ্যারান্টি দেয়।

READ_WRITE : সম্পর্কিত ডাটাবেস এন্ট্রি আপডেট হওয়ার পরে অবজেক্টগুলি (তত্ক্ষণাত্) পরিবর্তন হয়; এটি "নরম" লকগুলি ব্যবহার করে দৃ strong় ধারাবাহিকতার গ্যারান্টি দেয়।

ট্রান্সঅ্যাকশনাল : ডেটা অখণ্ডতা নিশ্চিত করে বিতরণকৃত এক্সএ লেনদেন ব্যবহার করে অবজেক্টগুলি পরিবর্তন হয়; এটি সম্পূর্ণ সাফল্যের গ্যারান্টি দেয় বা সমস্ত পরিবর্তন ফিরিয়ে আনে। এই চারটি ক্ষেত্রেই, যদিও একক ডাটাবেস এন্ট্রি আপডেট করা ক্যাশে থাকা গ্রাহকদের পুরো তালিকাটিকে অকার্যকর করবে না। হাইবারনেট তার চেয়ে একটু স্মার্ট :)

হাইবারনেটে এল 2 ক্যাচিং কীভাবে কাজ করে সে সম্পর্কে আরও জানতে আপনি "হাইবারনেট এল 2 ক্যাশে কী" নিবন্ধটি পরীক্ষা করতে পারেন বা রেডিসের সাথে হাইবারনেটে ক্যাচিংয়ের গভীরতা নিবন্ধটি পরীক্ষা করতে পারেন

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