একটি ড্রুপাল ডাটাবেসে সূচীগুলি যুক্ত করা কি নিরাপদ?


12

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

আমার মূল উদ্বেগটি হ'ল আপনি যখন কোর বা অবদানের কোডটি আপডেট করেন এবং স্কিমা পরিবর্তন হয় তখন কোনও কাস্টম সূচীর সাথে কী ঘটে। এক্ষেত্রে কী হয়?

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

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

  1. আমি মডিউল ইনস্টল foo
  2. মডিউল ফু ছক তৈরি করে foo
  3. আমি টেবিলে একটি সূচক যুক্ত করব foo
  4. মডিউলটির fooএকটি আপডেট রয়েছে যা স্কিমা পরিবর্তন করে

কি ঘটেছে?

উত্তর:


7

হ্যাঁ, এর ফলে সমস্যা হতে পারে।

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

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

এটি হওয়ার সম্ভাবনাগুলি তুলনামূলকভাবে কম, কমপক্ষে ছোট ছোট আপডেটের জন্য (তবে প্রকৃত মডিউলটির উপর নির্ভর করে I আমি সাধারণত কোনও পরিবর্তন যুক্ত করি না যা কিছুটা ছোটখাট প্রকাশের জন্য ভাঙ্গতে পারে) তবে এটি সম্ভব।

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

যে কেউ পারফরম্যান্স সম্পর্কিত বিষয়গুলিতে সক্রিয়ভাবে কাজ করছে এবং উপরেরটি সত্যিই ভাল করছে এটি ধরা পড়ছে, এখানে একটি উদাহরণ রয়েছে: http://drupal.org/node/983950


2

যেমনটি ডাটাবেসসেমিমা_পিগ এসকিউএল :: চেঞ্জফিল্ড এবং ডিবি_চেঞ্জ_ফিল্ডে () রিপোর্ট করা হয়েছে :

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

এর অর্থ হ'ল ডিবি_চেঞ্জ_ফিল্ড () কল করার আগে আপনাকে সমস্ত আক্রান্ত কী এবং সূচকগুলি db_rod_ {প্রাথমিক_কি, অনন্য_কি, সূচক} () সহ ফেলে দিতে হবে। কীগুলি এবং সূচকগুলি পুনরায় তৈরি করতে dচ্ছিক $ new_keys যুক্তি হিসাবে মূল সংজ্ঞাটি সরাসরি db_change_field () এ পাস করুন।

উদাহরণস্বরূপ, ধরুন আপনার কাছে রয়েছে:

$schema['foo'] = array(
  'fields' => array(
    'bar' => array('type' => 'int', 'not null' => TRUE)
  ),
  'primary key' => array('bar')
);

এবং আপনি foo.bar পরিবর্তন করতে চান টাইপ সিরিয়াল, এটিকে প্রাথমিক কী হিসাবে রেখে। সঠিক ক্রমটি হ'ল:

db_drop_primary_key($ret, 'foo');
db_change_field($ret, 'foo', 'bar', 'bar',
  array('type' => 'serial', 'not null' => TRUE),
  array('primary key' => array('bar'))
);

অনুরূপ কোড দ্রুপাল 7 এর জন্য রিপোর্ট করা হয়েছে।

মনে রাখবেন যে, আমার অভিজ্ঞতার জন্য আপনি একটি প্রাথমিক কী মুছে ফেলতে পারবেন না যা সিরিয়াল ক্ষেত্র ব্যবহার করে। ড্রুপাল On-এ, আমি চেষ্টা করে যাবার চেষ্টা করে সমস্ত সময় ত্রুটি পেয়েছি; দ্রুপাল on-তে আমি চেষ্টা করিনি।

এর বাইরে, ডাটাবেস সূচীগুলির সাথে আপনার আর কোনও সমস্যা থাকতে পারে তা আমি জানি না।

অন্য একটি মডিউল থেকে তৈরি করা একটি ডাটাবেস টেবিলের সাথে একটি সূচি যুক্ত করার বিষয়ে, আমি এটি করার পরামর্শ দেব না, কারণ:

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

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

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


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

3
এছাড়াও আপনি ডিবি টিউনার ব্যবহার করতে বিবেচনা করতে পারেন যা কোন সূচকগুলি তৈরি করতে হবে তা জানা সহজ।
তোস্তিনি

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