ব্যবহারকারীদের ইভেন্টের ডেটা সংরক্ষণ করার জন্য উপযুক্ত কৌশল


12

ডেটাবেস ডিজাইনের ক্ষেত্রে আমি বেশিরভাগই স্ব-শিক্ষিত। আমি এই প্রশ্নটি উত্থাপন করছি কারণ আমি এই সাধারণ কাঠামোতে স্থির হয়েছি তবে ভাবছি যে এটি সবচেয়ে দক্ষ বা 'শিল্প মানক' পদ্ধতি কিনা।

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

+--------------------+                   +------------------------+
|   UserData         |                   |   Activity             |
+-=------------------+                   +------------------------+
| ID     (auto uint) | <--1-to-many-+    | ID  (auto uint)        |
| UserName (text)    |              +--> | UserID (uint)          |
| Email    (text)    |                   | Timestamp (time)       |
| additional info... |                   | Type (ID to elsewhere) |
+--------------------+                   | additional info...     | 
                                         +------------------------+

আমাকে শিখতে সহায়তা করার জন্য আমি কোথায় কোনও উন্নতি করতে পারি তা জানতে চাই।

উত্তর:


5

অথবা একটি টেবিলের স্তর রয়েছে, বা তারিখের উপর ভিত্তি করে বিভিন্ন টেবিলগুলিতে বিভক্ত হওয়া বা ব্যবহারকারীদের পরিমাণ অনুসারে বা অন্য কিছু?

আপনি আপনার ডাটাবেসে 'বিভাজন' ধারণাটি দেখতে চাইতে পারেন। সর্বাধিক RDBMSes তাদের (যেমন, কিছু সমর্থন আছে মাইএসকিউএল , ওরাকল , এসকিউএল সার্ভার , PostgreSQL )। মূলত, আপনি আরডিবিএমএসকে প্রতি মাসে / বছর / যে কোনও পৃথক টেবিলের মধ্যে সঞ্চিত আছে তা তৈরি / পরিচালনার প্রক্রিয়া পরিচালনা করতে দেন, যখন এটির অ্যাক্সেস কোডটি এটিকে একটি বৃহত টেবিল হিসাবে বিবেচনা করে।

আপনি এটি ব্যবহারকারীর নাম, তারিখ বা ডেটা অ্যাক্সেস করার জন্য যা ব্যবহার করা হচ্ছে তা দ্বারা বিভাজন করতে পারেন। (এটি ব্যবহারকারীকেন্দ্রিক বনাম তারিখ-কেন্দ্রীভূত করার সুবিধাগুলি / অসুবিধাগুলি রয়েছে ... তবে আপনি জানেন না যে আপনি আমাকে এই সমস্ত ক্ষেত্রে যেতে চান)


ধন্যবাদ @Joe, আমি উইকিপিডিয়ার (চালু তা পড়তে হয়নি en.wikipedia.org/wiki/Partition_%28database%29 ) এবং লিঙ্ক আপনি পোস্ট কিছু। আপনি যে ধরণের পার্টিশনটির কথা উল্লেখ করছেন তা হ'ল আনুভূমিক বিভাজন। এটি এমন একটি বৈশিষ্ট্য যা আমি এখনও অবধি জানতাম না। আমি এখন একটি নতুন প্রশ্ন উত্থাপন করব: dba.stackexchange.com/questions/4134/… যা সঠিক বিভাজন অনুশীলন জিজ্ঞাসা করে।
সেন্টারঅরবਿਟ

6

আপনি খুব ভাল পর্যবেক্ষণ করেছেন। ভ্রমণ টেবিল দ্রুত এবং বৃহৎ হয়ে যাবে। আমি অতীতে যা করেছি তা হ'ল পুরানো ডেটা সংরক্ষণ করা (14 দিনের বেশি পুরানো বলুন) একটি ক্রিয়াকলাপের ইতিহাস টেবিলে। এটি করার ফলে ক্রিয়াকলাপ টেবিলটি একটি পরিচালনাযোগ্য আকারে রাখে এবং আপনার যদি গবেষণা করার দরকার হয় তবে আপনি সর্বদা ক্রিয়াকলাপের ইতিহাস টেবিলটি ফিরে তাকাতে পারেন ।


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

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

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