দ্রুত কি? REST এপিআই ব্যবহার করছেন বা সরাসরি একটি ডাটাবেস অনুসন্ধান করছেন?


16

দ্রুত পারফরম্যান্স বুদ্ধিমান কি? একটি REST এপিআই তৈরি করা এবং আপনার ওয়েব অ্যাপ্লিকেশনটি আপনার ডাটাবেসের সাথে সমস্ত মিথস্ক্রিয়া করতে বা আপনার ডাটাবেসটি সরাসরি জিজ্ঞাসা করার জন্য REST এপিআই ব্যবহার করে (যেমন জাভা জন্য জেডিবিসির মতো কোনও ডাটাবেসকে জিজ্ঞাসা করতে আপনার ভাষা যে সাধারণ জিনিস ব্যবহার করে)?

বিশ্রামের সাথে আমি যেভাবে দেখছি:

  1. আপনি REST পদ্ধতিতে কল করার জন্য আপনার কোডে একটি বিষয় তৈরি করেছেন
  2. কল করুন HTTP পদ্ধতি
  3. আপনার REST এপিআই এর ভিতরে কোড ডেটাবেসটিকে জিজ্ঞাসা করে
  4. ডাটাবেস কিছু তথ্য ফেরত দেয়
  5. REST এপিআই কোড ডেটা জসনের মধ্যে প্যাক করে আপনার ক্লায়েন্টকে প্রেরণ করে
  6. ক্লায়েন্ট জসন / এক্সএমএল প্রতিক্রিয়া গ্রহণ করে
  7. আপনার কোডের কোনও বস্তুর মানচিত্রের প্রতিক্রিয়া

অন্যদিকে, সরাসরি একটি ডাটাবেস অনুসন্ধান করা:

  1. আপনি ডাটাবেসটি জিজ্ঞাসা করতে ক্যোয়ারী স্ট্রিং দিয়ে একটি অবজেক্ট তৈরি করেন
  2. ডাটাবেস কিছু তথ্য ফেরত দেয়
  3. আপনার কোডের কোনও বস্তুর মানচিত্রের প্রতিক্রিয়া

সুতরাং এর মানে কি এই নয় যে কোনও REST এপিআই ব্যবহার করা ধীর হবে? হতে পারে এটি ডাটাবেসের ধরণের উপর নির্ভর করে (এসকিউএল বনাম NoSQL)?


3
একটি REST এপিআই কোনও ডাটাবেস অ্যাক্সেস প্রোটোকল নয়, সুতরাং প্রশ্নটি একটি বিভাগ ত্রুটির একটি বড়। একটি REST এপিআই একটি ডকুমেন্ট স্টোর। এটি সার্ভার সাইডে একটি ডাটাবেস ব্যবহার করতে পারে (বা এটি নাও পারে)। আপনার যদি কোনও REST এপিআইয়ের প্রয়োজন না হয় তবে অবশ্যই এটি ব্যবহার করবেন না। তবে তারপরে যা যায় সবকিছুর জন্য। আপনার যদি কোনও ডাটাবেসের প্রয়োজন না হয় তবে একটি ফাইল ডাটাবেসের চেয়ে ফাইল সিস্টেমে লেখা দ্রুত হবে। আপনার যদি কোনও ফাইল সিস্টেমের প্রয়োজন না হয় তবে একটিটি ব্যবহার করবেন না, র‌্যামে লেখা ডিস্কের চেয়ে দ্রুত। আপনি না প্রয়োজন এটি ব্যবহার করবেন না, CPU- র ক্যাশে লিখিতভাবে RAM যদি দ্রুত ইত্যাদি ইত্যাদি ইত্যাদি
Cormac Mulhall

1
"অন্যদিকে" আপনার ডেটাবেসটিকে বড় খারাপ বিশ্বের কাছে প্রকাশ করতে হবে।
পিটার বি

@ পিটারবি: না, "অন্যদিকে" ওয়েব অ্যাপ্লিকেশনটিতে ডাটাবেস প্রকাশ করছে যা বিশ্বাসযোগ্য।
জ্যাকবিবি

@ জ্যাকউসবি এবং ওয়েব অ্যাপ্লিকেশন ক্লায়েন্টগুলির কম্পিউটারে চলছে। সুতরাং এটি বিশ্বাসযোগ্য হওয়া উচিত নয় কারণ এটি কোনও পরিবর্তিত সংস্করণ হতে পারে।
পিটার বি

@ পিটারবি: একটি অবিশ্বস্ত সার্ভারে চলমান ওয়েব অ্যাপ সম্পর্কে প্রশ্নটি কিছু জানায় না। এটি একটি অত্যন্ত অস্বাভাবিক সেটআপ হবে।
জ্যাকবিবি

উত্তর:


18

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

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

আপনি কোন সমস্যার সমাধান করতে চাইছেন এবং আপনি যে আর্কিটেকচারটি ব্যবহার করছেন তা যাচাই করার আগে পারফরম্যান্স অনুকূল করার আগে আমি এমন একটি পরিস্থিতি নিয়ে ভাবতে লড়াই করছি যেখানে ডাটাবেস অপশনগুলি সরাসরি বনাম REST হতে পারে be


ক্যাশিং উল্লেখ করার জন্য +1। যদিও এটি করছে extra work। তবে প্রকৃতপক্ষে পুনরাবৃত্তি হওয়া ক্যোয়ারী ক্যাচ করে এটি দ্রুততর হতে পারে।
ইয়ানা আগুন সিসওয়ন্তো

3
@ ক্লি আপনার উত্তর একেবারেই সঠিক নয়। More দরকার না পড়লে একটি আরএসএস পরিষেবা চালু করার ফলে সিস্টেম আরও কাজ করছে বলে কার্যকরকরণটি কমিয়ে দেবে «প্রতিটি ক্ষেত্রেই শেষ পয়েন্টে ট্র্যাফিক থাকে না, উদাহরণস্বরূপ যদি কোনও বিপরীত প্রক্সি বহনকারী ফলাফলগুলি পরিচালনা করতে পারে।
থমাস

@ ক্লে আমি এই প্রশ্নটি জিজ্ঞাসা করার কারণটি এই এসও পোস্ট প্রোগ্রামারগুলির থেকেই ছিল st স্ট্যাককেক্সচেঞ্জ / প্রশ্নগুলি / ২777770০১ /… - একটি উত্তর সরাসরি অ্যাক্সেসের পরিবর্তে সম্পূর্ণরূপে RESTful সিস্টেম ব্যবহার করে কীভাবে অ্যামাজনকে দুর্দান্ত সাফল্য পেয়েছিল তা সম্পর্কে। সবে আমাকে ভাবছে ...
মাইক্রো

9

যদি আপনার উদ্বেগের গতি গতি হয় তবে হ্যাঁ একটি বিশ্রাম পরিষেবা উপরে বর্ণিত কারণে ধীর হয়ে যাবে। তবে, আপনি যে ধরণের বর্ণনা করেছেন তার গতি খুব কমই প্রাথমিক উদ্বেগ এবং যদি তা হয় তবে অন্য উপায়ে সমাধান করা যেতে পারে। অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল

আপনার প্রাথমিক উদ্বেগ আন্তঃব্যবযোগিতা (মোবাইল, ওয়েব, বি 2 বি) কিনা তা বিবেচনা করুন, এখন আরইএসইএসটি খুব আকর্ষণীয় কারণ এটি প্রযুক্তি অজ্ঞেয়।

ধরুন আপনি একটি ডাটাবেসের জন্য কোড করেছেন। আপনি যদি আপনার অন্তর্নিহিত ডেটা স্টোর পরিবর্তন করতে চান তবে আপনি কী করবেন। আপনি যদি অন্তর্নিহিত স্টোরটিতে শক্তভাবে মিলিত হন তবে এটি করা কতটা কঠিন হতে পারে?

আসল উত্তরটি এটি নির্ভর করে তবে আশা করি আমি আপনাকে কিছু চিন্তাভাবনা করার জন্য দিয়েছি!


6

যদি এই প্রশ্নের উত্তর দেওয়া কঠিন মনে হয়।

সঠিক সাধারণ উত্তরটি হওয়া উচিত: এটি নির্ভর করে।

বিশ্রামের সাথে আমি যেভাবে দেখছি:

  1. আপনি REST পদ্ধতিতে কল করার জন্য আপনার কোডে একটি বিষয় তৈরি করেছেন
  2. কল করুন HTTP পদ্ধতি
  3. আপনার REST এপিআই এর ভিতরে কোড ডেটাবেসটিকে জিজ্ঞাসা করে
  4. ডাটাবেস কিছু তথ্য ফেরত দেয়
  5. REST এপিআই কোড ডেটা জসনের মধ্যে প্যাক করে আপনার ক্লায়েন্টকে প্রেরণ করে
  6. ক্লায়েন্ট জসন / এক্সএমএল প্রতিক্রিয়া গ্রহণ করে
  7. আপনার কোডের কোনও বস্তুর মানচিত্রের প্রতিক্রিয়া

আপনার চিন্তায় একটি ভুল আছে।

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

ইনসফার @ ক্লেসের উত্তরটি একেবারেই সঠিক নয় :

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

ক্যাশেবল ফলাফলগুলি নিয়ে কাজ করার সময়, আপনার আবেদনের উপর কোনও প্রভাব নেই: জ্ঞাত প্রশ্নের উত্তরগুলি সরবরাহ করা বিপরীত প্রক্সিগুলির মাধ্যমে করা যেতে পারে।


4
যদি বিশ্রাম পরিষেবা স্তরে ডেটা ক্যাশেযোগ্য হয় তবে ওয়েব অ্যাপে এটি ক্যাশেযোগ্য, যা পারফরম্যান্সের জন্য আরও ভাল much
জ্যাকবিবি

দ্রুততম উপায় হ'ল, ওয়েব অ্যাপ্লিকেশনটিকে মোটেও আঘাত করা নয়।
থমাস জাঙ্ক

1
এবং কেবল এটি আরও আকর্ষণীয় করে তুলতে, আপনি যদি মেমরি ভি। ডিস্কটিতে অ্যাক্সেস করতে পারেন তবে ডাটাবেসের সমস্ত "হিট" সমান নয়।
জেফো

@ থমাস জাঙ্ক: আমি যদি আসল প্রশ্নটি সঠিক বুঝতে পারি তবে ক্লায়েন্টটি একটি ওয়েব অ্যাপ্লিকেশন, এবং যদি প্রশ্ন করা হয় যে ওয়েব অ্যাপটি সরাসরি ডিবিতে সংযুক্ত হওয়া উচিত বা বিশ্রাম পরিষেবার মাধ্যমে কল করা উচিত।
জ্যাকবিবি

1
এটি আমার উত্তরের কোনও পরিবর্তন করে না। একটি আরএসটি-পরিষেবা কল করার মধ্যে এমন একটি ওয়েব-সার্ভারকে কল করা অন্তর্ভুক্ত যা সম্ভবত উত্তরগুলি ক্যাশে করা যায় এমন বিপরীত প্রক্সিটির পিছনে থাকতে পারে - যেমনটি আমি ইতিমধ্যে বলেছি।
থমাস

2

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

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

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


1

এটা নির্ভর করে.

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

সুরক্ষার মতো মাঝারি স্তরের স্তরের পিছনে আপনার ডিবি লুকানোর অন্যান্য কারণও রয়েছে।


-2

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

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


1
Where আপনি কোথায় হারিয়ে গেছেন তা আমি জানি না, তবে এটি সম্পূর্ণ পরিষ্কার, আপনি যখন আরএসটি এপিআই ব্যবহার করছেন তখন আপনি অতিরিক্ত পদক্ষেপ নিচ্ছেন এবং প্রোগ্রামিং জড়িত থাকাকালীন অতিরিক্ত ধাপ "সর্বদা" মানে ধীর। «যদি এর অর্থ কার্যকরকরণে ধীর হয়, এটা ঠিক না.
থমাস জাঙ্ক

1
এমন পরিস্থিতি কি নেই যেখানে ডাটাবেস অ্যাক্সেস করা একটি খারাপ ধারণা কেবল বহনযোগ্যতা থেকে দূরে? কখনও কখনও একটি REST এপিআই ইত্যাদি থাকার কারণে সার্ভারের পাশে আরও যুক্তি (এবং আরও ভাল সুরক্ষা?) রাখা যেতে পারে?
জে ট্রানা

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

-2

বিশ্রাম :

  • বহু সীমান্ত এবং 1 ব্যাকএন্ডে খুলুন
  • আপনার নিজস্ব API তৈরি করতে হবে (বা লুপব্যাকের মতো একটি ব্যবহার করুন)
  • অফলাইনে কাজ করছে না

স্থানীয় ডিবি:

  • 'স্তরগুলিতে' খোলেনি, সিঙ্ক্রোনাইজ করার জন্য তাদের আপনার ব্যাকএন্ডে অ্যাক্সেস থাকা দরকার
  • কোনও এপিআই তৈরি করার দরকার নেই, ডিবি ইন্টারফেস ব্যবহার করুন
  • অফলাইনে কাজ করা

এটি প্রচুর পরিমাণে বিস্তৃত, এই পয়েন্টগুলিতে লোকদের ভুলতে হবে


2
-1। যদিও একটি এপিআই তৈরি করার কোনও "প্রয়োজন" নেই, ডাল তৈরি না করা প্রায়ই ডাটাবেস ব্যাকএন্ডের পরিবর্তনের প্রয়োজন হলে প্রচন্ড ব্যথার দিকে পরিচালিত করে। এছাড়াও আপনার ডিবি যদি "অফলাইন" থাকে তবে বিশ্রাম পরিষেবাটিও সেখানে উপলব্ধ করা যায় না তার কারণ নেই।
জেমস স্টেল 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.