সামাজিক নেটওয়ার্ক বিজ্ঞপ্তি সিস্টেম


10

পটভূমি

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

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

ইউআই পাশের, আমাদের কাছে একটি নম্বর সহ একটি বিজ্ঞপ্তি বোতাম থাকবে এবং বোতামটি ক্লিক করা আপনাকে বিজ্ঞপ্তি স্ক্রিনে নিয়ে যাবে।

সমস্যাটি

আমি বিজ্ঞপ্তিগুলি প্রয়োগ করার জন্য কৌশলগুলি এবং বেশিরভাগ সংস্থানগুলিতে ডেটাবেসে এক বা একাধিক বিজ্ঞপ্তি সারণী তৈরি করার বিষয়টি খুঁজে পেয়েছি research (আমি পছন্দ করি একটি উদাহরণ হ'ল গ্রহণযোগ্য উত্তর: /programming/9735578/building-a-notifications-s systemm )।

যে বিষয়টি আমাকে ফেলে দিচ্ছে তা হ'ল বিজ্ঞপ্তিগুলির জন্য বেশিরভাগ ডাটাবেস-চালিত কৌশলগুলির জন্য প্রতিটি অনুগামীের জন্য প্রতিটি বিজ্ঞপ্তির জন্য একটি সারি সন্নিবেশ করা প্রয়োজন। সুতরাং যদি হাজার জন লোক স্যালি অনুসরণ করে তবে আমরা সংশ্লিষ্ট সারণীতে এক হাজার সারি সন্নিবেশ করবো। এটা কি স্কেলেবল? দশম বা কয়েক সহস্রাধিক ব্যবহারকারী স্যালি অনুসরণ করছেন এবং তিনি প্রতিদিন কয়েক ডজন পোস্ট করছেন এমন জায়গায় পৌঁছলে কী ঘটে?

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

সেটআপ

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

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

অভিযোজ্য বস্তু

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

আমি আশা করি এটি এখানে পোস্ট করা কোনও সমস্যার যথেষ্ট নির্দিষ্ট; দরকার হলে আমি তা পরিমার্জন করতে পারি। আপনার যদি কোনও প্রশ্ন থাকে বা আমি গুরুত্বপূর্ণ বিবরণ বাদ দিয়েছি দয়া করে জিজ্ঞাসা করুন।

TL; ড

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

আপনি কি বিজ্ঞপ্তিগুলি শেষ করতে পারেন? উদাহরণস্বরূপ, 2 সপ্তাহেরও বেশি পুরানো যে কোনও কিছু মুছুন। সাইটের পরিপক্ক হিসাবে ব্যবহৃত টেবিলের আকারটি কম-বেশি ভারসাম্যপূর্ণ হওয়া উচিত।
গ্র্যান্ডমাস্টারবি

এটি কোনও সমস্যা হবে না, আমি যখন জনপ্রিয় ব্যবহারকারী প্রতিবার পোস্ট করেন তখন নোটিফিকেশন টেবিলের মধ্যে 50,000 এন্ট্রি লেখা ডাটাবেসটিকে লক করে রাখার পারফরম্যান্সের সাথে আমি আরও উদ্বিগ্ন ছিলাম।
ব্যবহারকারী 45623

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

উত্তর:


10

সুতরাং যদি হাজার জন লোক স্যালি অনুসরণ করে তবে আমরা সংশ্লিষ্ট সারণীতে এক হাজার সারি সন্নিবেশ করবো। এটা কি স্কেলেবল?

হ্যাঁ, প্রদত্ত ডাটাবেস সারণিগুলি যথাযথভাবে সূচকযুক্ত হয়।

দশম বা কয়েক সহস্রাধিক ব্যবহারকারী স্যালি অনুসরণ করছেন এবং তিনি প্রতিদিন কয়েক ডজন পোস্ট করছেন এমন জায়গায় পৌঁছলে কী ঘটে?

আপনি স্যালির জন্য প্রতিদিন কয়েক ডজন দশক বা লক্ষ লক্ষ নোটিফিকেশন রেকর্ড তৈরি করবেন, ধরে নিবেন যে আপনি প্রতিটি বিজ্ঞপ্তিকে চিরতরে রাখতে চান। এই জাতীয় ট্র্যাফিক সহ স্যালির মতো ব্যবহারকারীর শতাংশ সর্বদা খুব কম।

আমার আসল ধারণাটি ছিল প্রশ্নের সাথে সমস্ত কিছু পরিচালনা করার জন্য: বিজ্ঞপ্তি বোতামের নম্বরটি আপনি সর্বশেষে বিজ্ঞপ্তি স্ক্রিনে পরিদর্শন করার সময়ের চেয়ে সাম্প্রতিক পোস্ট করা সামগ্রীতে সারি-গণনাগুলির অনুরোধের মাধ্যমে প্রাপ্ত হবে, যখন পৃথক বিজ্ঞপ্তিগুলি আরও বিশদ অনুসন্ধান থেকে উত্পন্ন হবে আপনি যখন বিজ্ঞপ্তি স্ক্রিন পরিদর্শন করেছেন।

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

যখন ব্যবহারকারীরা কেবল একই কয়েক শতাধিক ব্যক্তির অনুসরণ করছেন তখন কি কোনও ডাটাবেস-চালিত নোটিফিকেশন সিস্টেমের দীর্ঘমেয়াদী স্কেল্যাবিলিটির জন্য নেতিবাচক প্রভাব রয়েছে?

এ কারণেই এটি কার্যকর হয় ... অল্প সংখ্যক লোক সর্বদা ট্র্যাফিকের সিংহভাগ উত্পাদন করে।

প্রতিটি অনুসারীর জন্য প্রতিটি বিজ্ঞপ্তির জন্য পৃথক বিজ্ঞপ্তি সারির প্রয়োজন ছাড়াই কি বিজ্ঞপ্তিগুলি ডাটাবেস-চালিত করার কোনও উপায় আছে?

হ্যাঁ ... বিজ্ঞপ্তিগুলি সংরক্ষণ করবেন না; আগুন এবং ভুলে যাওয়া স্টাইলে কেবল বিজ্ঞপ্তি ইমেলগুলি প্রেরণ করুন। অথবা, নির্দিষ্ট সময়ের জন্য বিজ্ঞপ্তিগুলি সংরক্ষণ করুন এবং তারপরে সেগুলি বাতিল করুন। অথবা, প্রতিটি বিজ্ঞপ্তি পড়ার পরে তা বাতিল করুন।

পুরো ক্যোয়ারী-চালিত নোটিফিকেশন সিস্টেমটি কি স্কেলেবল হতে পারে, বা ডিবিতে কোনও তথ্য না লেখার পাশাপাশি কোনও সুবিধা রয়েছে?

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

আমি কি খুব তাড়াতাড়ি ওভারথিংক করছি?

এমন কোনও ব্যক্তির সাথে কথা বলুন যিনি আপনাকে সঠিক সারণী সহ সঠিকভাবে সাধারণীকরণযুক্ত, সূচিকৃত ডাটাবেস ডিজাইন করতে সহায়তা করতে পারেন। আপনার বর্ণিত পরিস্থিতিতে এমন ডেটাবেস কার্যকরভাবে পরিচালনা করতে পারে না তার কোনও কারণ আমি দেখতে পাচ্ছি না।

একটি বাস্তব জীবনের উদাহরণ

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


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

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

1
এটি ভুল। এটি স্কেলযোগ্য নয়। প্রতিটি "স্যালি" এর জন্য আপনি এন সারি তৈরি করছেন যেখানে এন আপনার ব্যবহারকারীর সংখ্যা। আপনার যদি কোনও যুক্তিসঙ্গত ব্যবহারকারী থাকে তবে এটি দ্রুত ইস্যুতে পরিণত হবে। ১০০ "স্যালি" ১০,০০০ ব্যবহারকারীকে 10 বার পোস্ট করা 10 মিলিয়ন সারি একটি দিনে - খুব ভাল লাগে না? আপনি আসলে যা করতে চান তা হ'ল এটি উল্টে "স্যালি" পোস্টের জন্য একটি সারি তৈরি করুন এবং সেলি অনুসরণকারী সমস্ত ব্যবহারকারীকে তাদের নিজস্ব অনুলিপি পরিবর্তে এগুলি হস্তান্তর করুন। অবশ্যই আপনার যদি ব্যবহারকারী-নির্দিষ্ট যুক্তির প্রয়োজন হয় (যেমন সমষ্টি) ...
বেন

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