দ্রুততর ডিবি_উইকি, ডিবি_লেক্ট, বা এন্টিফিল্ডকিয়ারী কী


15

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

আমি বুঝতে পারি এটি সিস্টেমে কর আরোপ হতে পারে তাই আমি 1600 নোড দখল করার জন্য সেরা বিকল্পটি কোনটি খুঁজে বের করতে চাই। আমি যে অ্যাপ্লিকেশনটি তৈরি করছি তাতে সেকেন্ড বা এমনকি মিলিসেকেন্ডের শেভ করা অনেকটাই গুরুত্বপূর্ণ।

আপনার উত্তরের জন্য অগ্রিম ধন্যবাদ।


আপনি এটি প্রোফাইল করেছেন?
এমপিডোনাডিও

আপনি কি বোঝাতে চেয়েছেন তা নিশ্চিত না। আপনি কি একটু বিস্তারিত বলতে পারেন?
জোর্জে ক্যাল্ডারন

আপনার যা ব্যবহার করা উচিত তা নির্ভর করে আপনি ঠিক কী করার চেষ্টা করছেন তার উপর? আপনি যদি আরও বিশদ দিতে পারেন তবে আমরা সহায়তা করতে সক্ষম হতে পারি। যদি আপনি প্রচুর অনুসন্ধান চালাচ্ছেন তবে db_query () সবচেয়ে দ্রুত। তবে, যদি আপনি এটির সাথে সত্তা লোড করছেন (সত্তা_লোড) এটির চেয়ে বেশি কারণ এটি সম্ভবত কিছু যায় আসে না, কারণ 1600+ সত্তা লোড করার সময় সত্তা_লোড ধীর হবে।
donutdan4114

1
এটিতে ক্যোয়ারী কোড / ক্যোয়ারীর গতি ছাড়াও আরও রয়েছে। উদাহরণস্বরূপ আপনার নোড অ্যাক্সেস দরকার?
রোবি

@ রুবি - হ্যাঁ আমি করি। আমি এন্টিফিল্ডকিউরি ব্যবহার করে চলেছি তবে আমার প্রয়োজনের জন্য আমার নোডগুলিতে তিনটি কাস্টম ক্ষেত্রে অ্যাক্সেস করতে হবে। তবে র‌্যাফ কিছু সুন্দর পরামর্শ এবং সংখ্যা দিয়েছেন বলে নীচের উত্তরটি এখনও সেরা উত্তর। যা আমি ঠিক খুঁজছিলাম ছিল।
জর্জি ক্যালদারন

উত্তর:


24

সংক্ষেপে আপনার প্রশ্নের উত্তর দিতে, db_query দ্রুততম! বিভিন্ন কারণ, উত্স থেকে সংকলিত কিছু কারণ, তথ্য এবং চিত্র এখানে রয়েছে:

এই প্রশ্নের একটি সাধারণ গুগলিং, নিম্নলিখিত ফলাফলগুলি নিয়ে আসে:

For simple queries, db_query() is 22% faster than db_select()
For simple queries, db_query() is 124% faster than EFQ
For queries with two joins, db_query() is 29% faster than db_select()

এবং এই

db_query():

Total Incl. Wall Time (microsec):   796 microsecs
Total Incl. CPU (microsecs):    0 microsecs
Total Incl. MemUse (bytes): 123,352 bytes
Total Incl. PeakMemUse (bytes): 124,248 bytes
Number of Function Calls:   38

db_select()

Total Incl. Wall Time (microsec):   1,118 microsecs
Total Incl. CPU (microsecs):    0 microsecs
Total Incl. MemUse (bytes): 425,216 bytes
Total Incl. PeakMemUse (bytes): 436,392 bytes
Number of Function Calls:   88

আপনি যদি উপরে লক্ষ্য করেন db_select আরো ফাংশন কল করে এবং db_query এর চেয়ে বেশি মেমরি ব্যবহার করে।

  1. কেন db_select ব্যবহার করবেন তার কারণগুলির জন্য এখানে দেখুন
  2. Db_select- এর মাধ্যমে কেন એન્ટিফিল্ডকিউরি ব্যবহার করবেন তার কারণগুলির জন্য এখানে দেখুন
  3. Db_query এবং db_select এর পারফরম্যান্স তুলনার জন্য এখানে দেখুন

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


1
আমি ঠিক এটিই খুঁজছিলাম। ধন্যবাদ একটি গুচ্ছ রাফ
জর্জি ক্যালদারন

1

এটি একটি খুব খারাপ ধারণা, 1600 নোডের জন্য, API গুলি ঘুরে দেখবেন না এবং EntityFieldQuery ব্যবহার করবেন না। আপনি ভুল জিনিসটি অপ্টিমাইজ করছেন।


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

1

আপনি যদি কেবল 1600 নোড থেকে ফিল্ড ডেটা চান তবে EFQE সহায়ক হতে পারে। আপনার যদি ইতিমধ্যে EFQ থাকে তবে স্যান্ডবক্স পৃষ্ঠাটি দেখে আপনার কী প্রয়োজন তা নির্ধারণ করতে সক্ষম হওয়া উচিত।

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