প্লাগিনের জন্য নিজস্ব টেবিল তৈরি করা কি খারাপ অভ্যাস?


11

আমি যদি আমার প্লাগইনটির জন্য সেটিংস সংরক্ষণ করতে চাই তবে এটি বেশ সহজ এবং সরাসরি এগিয়ে।

এখন আমি ডাটাবেসে আরও কিছুটা সঞ্চয় করতে চাই।

একটি ফাইলের নাম এবং 3 টি অন্যান্য মান যা কেবলমাত্র সেই ফাইলটিতে প্রয়োগ হয়। এবং সেই মানগুলির সাথে অনেকগুলি ফাইল রয়েছে। ডেটাবেস পদ্ধতিতে অন্তর্নির্মিত ব্যবহার করে কি ধরণের সাবহারিগুলি সংরক্ষণ করা সম্ভব? আমি কীভাবে এগুলি মুছতে এবং বাছাই করতে পারি?

উত্তর:


13

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

মূল টেবিলগুলির সাথে যেতে বা আপনার নিজের যুক্ত করার পছন্দটি বিভিন্ন কারণের উপর নির্ভর করে।

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

আপনি, এই নির্দিষ্ট ডেটা সেট পাশাপাশি নিয়মিত পোস্ট বা CPTs অনেকটা সংরক্ষণ তাহলে wp_postsভাল হিসাবে হিসাবে wp_postmetaদ্রুত বাড়তে পারে।

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

যদি ইউজিনের ধারণাটি সঠিক হয়, তবে বিদ্যমান লিখিত প্লাগইনের কোনওটিই তাদের নিজস্ব টেবিল যুক্ত করতে পারে না, যা ভাগ্যক্রমে ঘটনাটি নয়।


আমি এই upvote করতে পারবেন না। " আপনি যা নিয়ে সবচেয়ে বেশি স্বাচ্ছন্দ্যময় " তা বৈধ বিবেচনা নয়। পৃথক সারণী ব্যবহারের জন্য বৈধ ব্যবহারের কেস রয়েছে তবে প্লাগইনগুলির সিংহভাগের জন্য, সেরা ডাব্লুপি ডিবি টেবিলগুলি ব্যবহার করে সেরা অনুশীলন নির্দেশ দেয়।
চিপ বেনেট

2
ফেয়ার এনফ @ চিপবনেট - এটি উচিত যুক্তির অংশ না হওয়া বা প্রথম স্থানে "যুক্তি" নয়। সম্পাদিত এবং মুছে ফেলা হয়েছে (এখনও কোনও উপার্জনের প্রত্যাশা করছেন না - তবে কোনওভাবেই প্রেরণা একমাত্র প্রেরণা নয়)।
জোহানেস পিল

1
+1 টি। আমি মনে করি এটি একটি যুক্তিসঙ্গত, সুচিন্তিত উত্তর। :)
চিপ বেনেট

5

ডাব্লুপি কোর ডিবি টেবিল ব্যবহার করা সেরা অনুশীলন

  1. কোর ডিবি টেবিলগুলি ব্যবহার করা আপনার ডেটা আরও পোর্টেবল এবং ব্যাকআপের পক্ষে সহজ করে তোলে , যেহেতু এটি মূল রফতানিকারক / আমদানিকারক, পাশাপাশি অগণিত ব্যাকআপ প্লাগইনগুলি দ্বারা পরিচালিত হবে
  2. কোর ডিবি টেবিলগুলি ব্যবহার করা আপনার ডেটা ম্যানিপুলেট করা সহজ এবং নিরাপদ করে তোলে , যেহেতু আপনার কাছে ডিবি ডেটা অনুসন্ধান, যুক্তকরণ, সংশোধন, মোছা এবং স্যানিটাইজিং সম্পর্কিত বিভিন্ন ওয়ার্ডপ্রেস কোর ফাংশনগুলিতে বিশেষত খুব শক্তিশালী $wpdbশ্রেণীর মাধ্যমে আরও স্বজ্ঞাত অ্যাক্সেস থাকবে ।
  3. কোর ডিবি সারণি ব্যবহার করে ডেটা শ্রেণিবদ্ধকরণ এবং সঞ্চয়স্থানের সর্বোত্তম অনুশীলনগুলিকে উত্সাহিত / সহজতর করে , যেমন প্লাগইন বিকল্পগুলিকে একক সারিতে অ্যারে হিসাবে স্টোর করাwp_options এবং প্লাগিন বিকাশকারীকে ডেটা তৈরির / সংরক্ষণের ধরণের সাবধানতার সাথে বিবেচনা করার জন্য জোর করে - এটি কি একটি CPT? এটা কি এক শ্রেণিবিন্যাস? এটা কি মেটা পোস্ট?
  4. কোর ডিবি টেবিল ব্যবহার করার সময় আপনার প্লাগইন ক্রাফ্টের পিছনে চলে যাওয়ার সম্ভাবনা কম

ওয়ার্ডপ্রেস তার ডাটাবেসে টেবিল যুক্ত করার জন্য প্লাগইনগুলির জন্য একটি উপায় সরবরাহ করে

তবে, সেই ক্ষেত্রে ব্যবহারের ক্ষেত্রে পৃথক ডিবি টেবিলের প্রয়োজন হয়, ওয়ার্ডপ্রেস আপনার কাস্টম টেবিলটি ওয়ার্ডপ্রেস ডাটাবেসে যুক্ত করার জন্য যে পদ্ধতিটি সরবরাহ করে তা অবশ্যই ব্যবহার করুন , যাতে আপনি শক্তিশালী $wpdbশ্রেণীর সুবিধা নিতে পারেন । এই কোডেক্স এন্ট্রি তালিকার তথ্য / ক্যাভেটগুলি নোট করুন:

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

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

সুতরাং, আমরা নিম্নলিখিত উপসংহার করতে পারেন:

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

আমি এই upvote করতে পারেন। ;-) স্পষ্টভাবে উল্লেখ করার জন্য +1 $wpdb(নন-কোর টেবিলগুলির সাথে এটি ব্যবহার করা আমার উত্তরে অন্তর্ভুক্ত ছিল, সেই শ্রেণিটি মিস করতে চাইবে না)
জোহানেস পিল

2
আমি প্রাথমিকভাবে ধরে নিয়েছিলাম যে "নিজস্ব ডিবি টেবিলগুলি" ডাব্লুপি ডাটাবেসের বাইরে টেবিলগুলি বোঝায় ; একবার আমি এই ভুল অনুমানের অচলাবস্থা পেরিয়ে গেলে প্রশ্ন (এবং উত্তর / মন্তব্য) আরও স্পষ্ট হয়ে উঠল। :)
চিপ বেনেট

1

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

EAV ফর্ম্যাট ওয়ার্ডপ্রেস তার পোস্ট মেটার জন্য ব্যবহার করে এটি বহু-মানদণ্ড অনুসন্ধানে নিজেকে ভাল ধার দেয় না।

আপনি যদি আপনার মেটাটিকে অনেকগুলি এন্ট্রিগুলিতে ভাগ করেন তবে পোস্ট মেটা টেবিলে আপনার প্রতি পোস্টে অসংখ্য এন্ট্রি থাকবে এবং মেটাসের মাধ্যমে কোনও পোস্ট অনুসন্ধান করা অনেক ধীর হবে।

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

আপনার প্লাগইনটিতে হাজার হাজার এন্ট্রি এবং সম্পর্কিত মেটা না থাকলে বড় সমস্যা নয়।

তবে একটি বড় সমস্যা যদি আপনার প্লাগইন বড় কিছু করতে চলেছে।


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

কিন্তু, লোকেরা যদি এই 3 টি মেটাগুলি খুব সন্ধান করতে চলেছে, বিশেষত একত্রে, তবে আমি আপনাকে আলাদা টেবিল সেট আপ করার পরামর্শ দিই।

সেই বিন্যাসের সাথে কেবল একটি এন্ট্রি সহ একটি টেবিল, এতে সমস্ত মেটাও রয়েছে ঠিক আছে, এবং বিদ্যুতের দ্রুত জিজ্ঞাসা করবে।

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


0

আপনি মিডিয়া লাইব্রেরিতে আপনার ফাইলগুলি আপলোড করতে পারেন। মিডিয়া লাইব্রেরির প্রতিটি আইটেম এটি wp_postsসারণীতে সঞ্চিত থাকে । এর অর্থ প্রতিটি ফাইলের মেটা ডেটা থাকতে পারে। আপনি মেটাডেটা এপিআইwp_postmeta ব্যবহার করে টেবিলের প্রতিটি ফাইলের জন্য প্রয়োজনীয় তথ্য সংরক্ষণ করতে পারেন ।

প্লাগিনের জন্য নিজস্ব টেবিল তৈরি করা কি খারাপ অভ্যাস?

হ্যাঁ, আপনি যদি তার পরিবর্তে মূল কার্যকারিতাটি ব্যবহার করতে পারেন তবে নিজের টেবিল তৈরি করা খারাপ অভ্যাস।


3
না, এটি একটি খারাপ অভ্যাস নয়। আপনি ধীর প্রশ্নগুলি এবং শক্তভাবে মিলিত কোডটিকে একটি ভাল অনুশীলন না বিবেচনা না করলেই।
অনেট্রিকপনি

0
class TMM {

    public static $options;

    public static function register() {
        self::$options = get_option(TMM_THEME_PREFIX . 'theme_options');
    }

    public static function get_option($option) {
        return @self::$options[$option];
    }

    public static function update_option($option, $data) {
        self::$options[$option] = $data;
        update_option($prefix . 'theme_options', self::$options);
    }

    //ajax
    public static function change_options() {

        $action_type = $_REQUEST['type'];
        $data = array();
        parse_str($_REQUEST['values'], $data);
        $data = self::db_quotes_shield($data);

        if (!empty($data)) {
            foreach ($data as $option => $newvalue) {
                if (is_array($newvalue)) {
                    self::update_option($option, $newvalue);
                } else {
                    $newvalue = stripcslashes($newvalue);
                    $newvalue = str_replace('\"', '"', $newvalue);
                    $newvalue = str_replace("\'", "'", $newvalue);
                    self::update_option($option, $newvalue);
                }
            }
        }
        _e('Options have been updated.', TMM_THEME_FOLDER_NAME);
        exit;
    }

    public static function db_quotes_shield($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                if (is_array($value)) {
                    $data[$key] = self::db_quotes_shield($value);
                } else {
                    $value = stripslashes($value);
                    $value = str_replace('\"', '"', $value);
                    $value = str_replace("\'", "'", $value);
                    $data[$key] = $value;
                }
            }
        }

        return $data;
    }

}

  • শ্রেণীর নামটি আসল, আপনার ইচ্ছামত নাম পরিবর্তন করুন।
  • ফাংশনে পিএইচপি যুক্ত করুন: অ্যাড_টিশন ('init', অ্যারে ('টিএমএম', 'রেজিস্টার'), 1);
  • এবং এজাক্সের জন্য যুক্ত করুন: যোগ_অ্যাকশন ('ডাব্লুপি_জ্যাক্স_চেঞ্জ_প্লেশনস', অ্যারে ('টিএমএম', 'চেঞ্জ_অপশন'));
  • বিকল্পটি পেতে যেখানে আপনাকে এটি ব্যবহার করতে হবে (উদাহরণস্বরূপ): $ লোগো_ইমগ = টিএমএম :: get_option ('লোগো_ইমগ');
  • দেশীয় ওয়ার্ডপ্রেস পদ্ধতিতে আপনার বিকল্পগুলি সংরক্ষণ করতে এটি ব্যবহার করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.