টম্বস্টোন সারণী বনাম মুছে ফেলা ডাটাবেস সিঙ্ক্রোনাইজেশনে ও নরম মোছার পরিস্থিতিতে


17

আমার ক্লায়েন্ট সিঙ্ক্রোনাইজেশন প্রয়োজনের জন্য মুছে ফেলা আইটেম ট্র্যাক রাখা প্রয়োজন।

সাধারণভাবে, একটি সমাধি প্রস্তর টেবিল এবং একটি ট্রিগার যুক্ত করা ভাল যা সার্ভার ডাটাবেস থেকে একটি সারি মুছে ফেলা হয়েছিল তা ট্র্যাক করে - মূলত মুছে ফেলা আইটেমটি থেকে ডেটা সহ সমাধিস্টোন টেবিলে একটি নতুন সারি যুক্ত করা - বা আইটেমগুলিতে রাখা মূল টেবিল এবং পতাকা তাদের মুছে সাধারণত টাইপ বিট একটি কলাম সঙ্গে, যা নির্দেশ করে একটি সারিতে মুছে যাবে এবং আর যখন ডিলিট ঘটেছে অন্য কলাম ট্র্যাক করতে?

উত্তর:


17

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

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

আমি দেখতে পাচ্ছি, এটি বিভিন্ন সিস্টেমের প্রয়োজনীয়তার মধ্যে লেনদেনের বিষয়। আমার যদি দ্রুত মুছে ফেলা / আন-মুছে ফেলার প্রয়োজন হয় তবে পতাকাটি আরও ভাল be উত্তম.
লরেঞ্জো পলিডোরি

তুমি বুঝতে পেরেছ. এমনকী এমন ঘটনাও ঘটতে পারে যেখানে অন্য বিকল্পটি পছন্দনীয়। উদাহরণস্বরূপ, যদি আপনার কেবলমাত্র ২৪ ঘন্টা উপলব্ধ থাকার জন্য নরম মোছার প্রয়োজন হয়, ওরাকলে আপনি কোনও গ্যারান্টিযুক্ত পূর্বাবস্থায় ধরে রাখার সময় সেট করতে এবং তারপরে মুছে ফেলা ডেটা দেখতে ফ্ল্যাশব্যাক কোয়েরিগুলি ব্যবহার করতে পারেন।
লেফ রিফেল

5

হয়তো আপনার উদ্দেশ্য দুটি উদ্দেশ্য একত্রিত করা উচিত। কেন ???

আসুন সেই টেবিলটি ব্যবহার করুন (মাইএসকিউএল-উপভাষা)

CREATE TABLE mydata
(
    id int not null auto_increment
    firstname varchar(16) not null,
    lastname varchar(16) not null,
    zipcode char(5) not null,
    ...
    deleted tinyint not null default 0
    KEY (deleted,id),
    KEY (deleted,lastname,firstname,id),
    KEY (deleted,zipcode,id),
    KEY (lastname,firstname),
    KEY (zipcode),
    PRIMARY KEY (id)
);

দয়া করে মনে রাখবেন যে, প্রাইমারী কী ব্যতীত আপনার তৈরি প্রতিটি সূচি deletedপতাকাটির আগে এবং শেষে সমাপ্ত হওয়া উচিতid

সমাধিক্ষেত্র টেবিল তৈরি করা যাক

CREATE TABLE mytomb SELECT id FROM mydata WHERE 1=2;
ALTER TABLE mytomb ADD PRIMARY KEY (id);

যদি আপনার টেবিলটিতে ইতিমধ্যে একটি deletedপতাকা থাকে তবে আপনি টমমস্টোন টেবিলটি তৈরি করতে পারেন

INSERT INTO mytomb SELECT id FROM mydata WHERE deleted = 1;

ঠিক আছে এখন ডেটা এবং সমাধিপাথর preped হয়। আপনি কীভাবে মুছে ফেলবেন?

ধরা যাক আপনি 07305 জিপকোডের প্রতিটি লোককে মুছে ফেলছেন। আপনি নিম্নলিখিত চালাতে হবে:

INSERT IGNORE INTO mytomb SELECT id FROM mydata WHERE deleted=0 AND zipcode='07305';
UPDATE mydata SET deleted=1 WHERE deleted=0 AND zipcode='07305';

ঠিক আছে, এটি কোনওভাবেই আপনি এটিকে দেখছেন না বলে অনেকগুলি ওভারহেডের মতো মনে হয়।

এখন, আপনি কি মুছে ফেলা সমস্ত ডেটা দেখতে চান? এখানে দুটি ভিন্ন উপায় রয়েছে:

  • SELECT * FROM mydata WHERE deleted=1;
  • SELECT B.* FROM mytomb A INNER JOIN mydata B USING (id);

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

এখন, আপনি কি জিপকোড 07304 এর প্রত্যেক ব্যক্তিকে দেখতে চান? এখানে দুটি ভিন্ন উপায় রয়েছে:

  • SELECT * FROM mydata WHERE deleted=1 AND zipcode='07304';
  • SELECT A.* FROM mydata A LEFT JOIN mytomb B USING (id) WHERE B.id IS NULL AND A.zipcode='07304'

ভর মুছে ফেলা সম্পর্কে কীভাবে? এখানে দুটি ভিন্ন উপায় রয়েছে:

  • DELETE FROM mydata WHERE deleted=1;
  • DELETE B.* FROM mytomb A INNER JOIN mydata B USING (id); DELETE FROM mytomb;

উপসংহার

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


দুটি কৌশল অব্যাহত ভিত্তিতে ব্যবহার করার কি কোনও সুবিধা আছে? বা আপনি পারফরম্যান্সটি মূল্যায়নের জন্য কেবল এগুলি সমান্তরালভাবে ব্যবহার করার পরামর্শ দিচ্ছেন, এবং তারপরে একটি বা অন্যটির প্রতি প্রতিশ্রুতিবদ্ধ?
সমস্ত ট্রেডের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.