বনাম মোট মান গণনা করে সংরক্ষণ করা


96

সমষ্টিগত মানগুলি কখন সংরক্ষণ করতে হবে এবং উড়তে কখন সেগুলি গণনা করা হবে তা নির্ধারণের জন্য কি থাম্বের কোনও নির্দেশিকা বা নিয়ম রয়েছে?

উদাহরণস্বরূপ, ধরুন আমার কাছে উইজেট রয়েছে যা ব্যবহারকারীরা রেট করতে পারেন (নীচে স্কিমা দেখুন)। প্রতিবার আমি কোনও উইজেট প্রদর্শন করি আমি Ratingsটেবিল থেকে গড় ব্যবহারকারীর রেটিং গণনা করতে পারি । বিকল্পভাবে আমি Widgetটেবিলে গড় রেটিং সঞ্চয় করতে পারতাম । এটি প্রতিবার আমি যখন উইজেটটি প্রদর্শন করি তখন রেটিং গণনা করা থেকে আমাকে বাঁচাতে পারে, তবে তারপরে আমাকে প্রতিবারের জন্য কোনও উইজেট রেট দেওয়ার সময় গড় রেটিং গণনা করতে হবে।

Ratings       Widgets
---------     -------
widget_id     widget_id
user_id       name              
rating        avg_rating  <--- The column in question

উত্তর:


58

এটা নির্ভর করে. প্রাক-গণনা করা সামগ্রিক মান লেখাগুলিতে একটি বৃহত্তর বোঝা রাখে, সেগুলি প্রাপ্ত করা পাঠকে আরও কঠিন করে তোলে

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

উচ্চ-রচনামূলক, উচ্চ-পঠিত দৃশ্যে, ব্যাকগ্রাউন্ডে এমন একটি টাস্ক থাকার কথা বিবেচনা করুন যা কোনও বস্তুগত দৃশ্যের প্রভাবগুলিকে অনুকরণ করে তবে বাস্তব সময়ের চেয়ে কম ক্ষেত্রে। এটি লিখন এবং পাঠ্য পারফরম্যান্স সংরক্ষণ করার সময় একটি "যথেষ্ট যথেষ্ট" গড় উপস্থাপন করবে।

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


আমি এই আলোচনাটি বস্তুগত দৃষ্টিভঙ্গি সম্পর্কে খুব সহায়ক বলে মনে করেছি। এটি ওরাকলের দিকে তৈরি করা হয়েছে তবে সাধারণভাবে বোঝা যায়। আমার মতো যারা মাইএসকিউএল ব্যাকগ্রাউন্ড থেকে এসেছেন, তাদের জন্য একটি মাইএসকিউএল ভিউ ম্যাটেরিয়াল ভিউ থেকে আলাদা, এটি ভার্চুয়াল এবং ডিস্কে সঞ্চয় করে না (আমি যে লিঙ্কটি দিয়েছি সে সম্পর্কে কথা হয়েছে)।
সিদ্ধার্থ

upvoted! সঠিক প্রশ্নটি জিজ্ঞাসা করতে চলেছিল, এসএমএ, ইএমএ, ডাব্লুএমএ, আরএসআই ইত্যাদির মতো সূচকগুলি আমার সংরক্ষণ করা দরকার এবং তারা ভারী গণনা জড়িত, আমি বর্তমানে একটি টেবিল তৈরি করছিলাম যা আমি ম্যানুয়ালি এ পর্যন্ত রিফ্রেশ করছি, এই সূচকগুলি প্রতিবার 100% পরিবর্তিত হয় নতুন তথ্য আসছে, এগুলি বজায় রাখার জন্য ভাল কৌশল কী, আমি জানি সবাই বাম এবং ডানদিকে ভিউ জিজ্ঞাসা করা শুরু করলে দর্শনগুলি সম্পূর্ণরূপে ডাটাবেস ছিড়ে ফেলবে
পাইরেটঅ্যাপ

11

অন্তর্নিহিত সংখ্যাগুলি কতবার পরিবর্তন / আপডেট করা যায় তার তুলনায় আপনাকে কতবার গণনা করতে / প্রদর্শন করতে হবে।

সুতরাং, যদি আপনার 10k দৈনিক হিটগুলির সাথে এমন কোনও ওয়েবসাইট থাকে যা কেবল এমন একটি মান প্রদর্শন করে যা কেবলমাত্র একবারে একবার পরিবর্তন করতে পারে তবে আমি অন্তর্নিহিত মানগুলি পরিবর্তন করার সময় এটি গণনা করব (যে কোনও উপায়ে ডাটাবেস ট্রিগার হতে পারে)।

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


প্রতি 15 মিনিট, 10 মেট্রিক যা প্রতি মেট্রিকে 1000 সারি দিয়ে 100% পরিবর্তন করে
পাইরেটএপ

1
@ পাইরেট অ্যাপ এবং এটি 15 মিনিটের গড় উইন্ডোতে কতবার দেখা যায়? আপনি যা করতে পারেন তা হ'ল এটি একটি 15 মিনিটের উইন্ডোতে প্রথম অনুরোধে তৈরি করা এবং তারপরে লোকেদের উপর চাপ দিন এমন লোকদের জন্য এটি ক্যাশে করুন
জো

এটি একটি ওয়েবসাইটে থাকবে তাই আমি ধরে নিই যে কমপক্ষে ১০০০০০ লোক এটি শুরু করে দেখবে, সাইট লাইভ নয় তাই ব্যবহারকারীর আচরণের প্রকৃত ডেটা না রয়েছে
পাইরেটঅ্যাপ

1
সমস্যাটি হ'ল এটি কতবার পরিবর্তিত হয় তার সাথে সম্পর্কিত কতগুলি অনুরোধ। সুতরাং যদি আপনি অন্তর্নিহিত ডেটা পরিবর্তনের আগে 10,000 বার দেখা যায় এমন কোনও কিছু প্রাক-উত্পন্ন করেন, তবে হ্যাঁ, এটি প্রাক-উত্পন্ন করুন। যদি এটি কেবল একবারে দেখা হয়, বা একাধিকবার কম হয় (কারণ ডেটা এত তাড়াতাড়ি পরিবর্তিত হয়, বা পৃষ্ঠাটি খুব কমই তাকানো হয় বলে) তবে আপনি পাবেন না।
জো

4

স্টেল উইজেটস টেবিলটি "অবৈধ" (পুনরায় গণ্য করার জন্য) উইজেটের সারি হিসাবে ব্যবহার করুন। অন্যান্য থ্রেড (অ্যাসিনক্রোনাস) টাস্ক ব্যবহার করুন যা এই মানগুলিকে পুনরায় গণনা করতে পারে। গণনার সময়কাল বা মুহূর্ত সিস্টেমের প্রয়োজনীয়তার উপর নির্ভর করে:

  • শুধু পড়ার উপর,
  • মাস শেষে,
  • দিনের শুরুতে কিছু ব্যবহারকারীর জন্য
  • ...

1
তারা কীভাবে তখন বাসি সারিতে উঠবে?
jcolebrand

2
@ জকোলেব্রান্ড .. কিছু উইজেটের জন্য রেটিং (রেটিং টেবিল) সন্নিবেশ / মুছে ফেলার মুহুর্তটি। এই মুহুর্তে উইজেটস টেবিলের গড় মানটি অবৈধ হয়ে উঠছে, সুতরাং আমাদের স্টেল উইজেটস রেকর্ডে টেবিলটি toোকাতে হবে যার কেবলমাত্র একটি কলাম রয়েছে - উইজেট_আইডি। ট্রিগার বা সঞ্চিত প্রোক ব্যবহার করুন যা রেটিং টেবিল বা আপনার অবশ্যই বৈকল্পিকের রেকর্ড সন্নিবেশ করে।
গারিক

2

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

এইভাবে আপনাকে প্রতিবার পুনরায় গণনা করতে হবে না, আপনি তখনই গণনা করতে পারবেন যখন আপনাকে কলাম মানটি পড়তে হবে এবং পুনরায় গণনা করতে হবে true এইভাবে আপনি পুনর্বিবেচনার প্রচুর সাশ্রয় করবেন।


2

কেসটির ক্ষেত্রে বিশেষত একটি বিচ্ছিন্ন সমাধান রয়েছে যেখানে আপনাকে গড় নির্ধারণের জন্য সমস্ত রেটিং যুক্ত করতে এবং মোট দিয়ে ভাগ করতে হয় না। পরিবর্তে আপনার কাছে এমন একটি অন্য ক্ষেত্র থাকতে পারে যাতে মোট পর্যালোচনা রয়েছে, সুতরাং প্রতিবার যখন আপনি একটি রেটিং যুক্ত করেন তখন আপনি (গড় औसत + নতুন_রেটিং) / মোট ব্যবহার করে নতুন গড় গণনা করেন, এটি সামগ্রিকের চেয়ে অনেক দ্রুত এবং আপনার থেকে ডিস্কের পাঠ্য হ্রাস করে সমস্ত রেটিং মানগুলিতে অ্যাক্সেস করতে হবে না। অনুরূপ সমাধান অন্যান্য ক্ষেত্রে প্রয়োগ হতে পারে।

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

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