যখন আপনাকে একটি বাল্ক অপারেশন বাস্তবায়নের দরকার হয় তখন আপনি কি একটি ORM কাঠামোটি পরিত্যাগ করবেন?


15

এখানে একটি সাধারণ পরিস্থিতি:

  • আপনাকে একটি অ্যাপ্লিকেশনটিতে একটি বাল্ক অপারেশন প্রয়োগ করতে হবে যা একটি ওআরএম কাঠামো ব্যবহার করে।
  • প্রথম পাসের পরে, আপনি উল্লেখযোগ্য পারফরম্যান্স সমস্যা লক্ষ্য করেছেন।

এখানে আমার প্রশ্ন:

  • এই পরিস্থিতিতে, আপনার কী এমন কোনও সমাধানের পক্ষে উচিত যা কাঁচা এসকিউএল অন্তর্ভুক্ত করে?
  • অথবা এমন কোনও সুপরিচিত ডিজাইনের ধরণ রয়েছে যা আপনাকে ওআরএম ফ্রেমওয়ার্কগুলির সাথে সাধারণত বাল্ক অপারেশনের সাথে সম্পর্কিত সমস্যাগুলি প্রশমিত করতে সহায়তা করতে পারে?

সম্পাদনা করুন:

  • আমি আপনাকে জিজ্ঞাসা করছি না পুরো অ্যাপ্লিকেশনটি থেকে আপনার ORM ফ্রেমওয়ার্কটি সরিয়ে নেওয়া উচিত।
  • আমি জিজ্ঞাসা করছি: অ্যাপ্লিকেশনটির এই ছোট টুকরাটির জন্য আপনার কি ORM কাঠামোটি বাদ দেওয়া উচিত?

আপনার কিছু করা উচিত কিনা আমি জানি না , তবে আপনি কি আপনার বাল্ক অপারেশনকে ব্যাচ করার চেষ্টা করেছেন ?
ক্রিসঅনোডেল

উত্তর:


13

ORM গুলি আপনার ডেটাবেজে অ্যাক্সেস সম্পূর্ণরূপে গ্রহণ করার উদ্দেশ্যে নয়। CR০% কোডের জন্য এগুলি CRUD ব্যবহার করুন, আপনার নিজের লিখনে যে জিনিসটি খুব ক্লান্তিযুক্ত তা। সঞ্চিত পদ্ধতি, গতিশীল এসকিউএল, বা আপনি যা চান 20% সাবধানে অপ্টিমাইজ করা প্রয়োজন Use


4
এটি কাজ করবে যদি আপনি কোনও ওআরএম ব্যবহারের সিদ্ধান্ত নেওয়ার মূল কারণগুলির মধ্যে ডেটাবেস বিমূর্তি না হত।

@ পিয়ার ৩০৩৩, আপনার মন্তব্য বুঝতে আমার খুব অসুবিধা হচ্ছে। আপনি কি বোঝাতে চেয়েছেন?
মার্ক ক্যানলাস

@ মার্কক্যানলাস: আমি মনে করি তার অর্থ "ডাটাবেস বিমূর্ত করা", এই অর্থে যে আপনি যদি ডাটাবেসটি পরিবর্তন করতে পারেন (যেমন এসকিউএল সার্ভার থেকে মাইএসকিউএল যেতে পারেন) আপনি যদি এটি করতে চান। অনুশীলনে, এই ব্যবহারের ক্ষেত্রে খুব কমই ঘটে।
রবার্ট হার্ভে

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

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

7

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

ORM আপনার বাধ্যতামূলক ডাটাবেস জ্ঞান প্রতিস্থাপন করা উচিত নয়। এটি একটি সরঞ্জাম যা আপনি আপনার কোডে আরও উত্পাদনশীলতা এবং নমনীয়তা পেতে ব্যবহার করেন তবে আপনার কার্য সম্পাদনকে অনুকূল করতে আপনার অন্তর্নিহিত প্রক্রিয়াগুলি জানতে হবে।

আপনি একটি নির্দিষ্ট ওআরএম নির্দিষ্ট করেন নি তাই পারফরম্যান্স উন্নতির জন্য আমরা এখানে কাজগুলি করেছি:

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

1

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


1

ওআরএমগুলি যাদুকর কিছুই করে না। তারা বস্তুর অ্যাক্সেসের পদ্ধতিগুলি এসকিউএল-তে অনুবাদ করে। তারা যে এসকিউএল বিবৃতিগুলি সম্পাদন করে সেগুলি এসকিউএল থেকে ম্যানুয়ালি লিখতে চাইবেন না arily এই কথাটি বলার পরে, কয়েকটি সমস্যা রয়েছে যাতে আপনি হোঁচট খেতে পারেন:

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

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


ক্যাশে এড়াতে, স্টেটলেসসেশন ব্যবহার করুন। এছাড়াও, অটো ইনক্রিমেন্ট আইডি এড়িয়ে চলুন। পরিবর্তে হাইলো বা গাইড ব্যবহার করা উচিত।

1

ওআরএম বাইপাস করুন। কেবল তা-ই নয় তবে পাশাপাশি "নিয়মিত" স্কিলটিও বাইপাস করুন। একটি স্টেজিং টেবিলে অত্যন্ত বড় ডেটা সেট sertোকাতে আপনার ডাটাবেসের একটি বাল্ক ইউটিলিটি ব্যবহার করুন। তারপরে আপনার মঞ্চের ক্রিয়াকলাপ সম্পাদন করতে স্কুয়েল ব্যবহার করুন।

আপনার "ব্লগের স্বাদ" ওআরএম সমস্ত পরিস্থিতিতে কাজ করতে পারে না।


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

0

সেই পরিস্থিতিতে ছিল। কখনও কখনও, আপনি করতে হবে।

কিছু ওআরএম বিকাশকারীকে অবজেক্টের মডেলটি এড়াতে এবং সরাসরি ডাটাবেস স্তরে যেতে দেয়।

এছাড়াও ওআরএম রয়েছে, যেগুলি বাল্ক অপারেশনগুলি ব্যবহার করে, এনক্যাপসুলেটেড, অবজেক্ট ওরিয়েন্টেড হিসাবে।


0

ইউলক্যাট দ্বারা উল্লিখিত হিসাবে , কিছু কিছু ওআরএম রয়েছে যা আপনাকে বাল্ক অপারেশনগুলি ব্যবহার করতে দেয়।

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

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

প্রায় 100 দিন আগে একটি কাঁচা এসকিউএল কলটিতে একটি বাগ সন্ধান করতে আমার প্রায় একদিন লেগেছিল, এবং বাগটি কেবল একটি একক অক্ষর ছিল! তার পর থেকে, আমি অ্যাপটিতে কাঁচা এসকিউএল থাকা এড়াতে চেষ্টা করি এবং সমস্ত এসকিউএল পদ্ধতি পৃথকভাবে ইউনিট-টেস্ট করা আছে।


0

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

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