কোনও সামাজিক ক্রিয়াকলাপ স্ট্রিম বাস্তবায়নের সর্বোত্তম পদ্ধতি কী? [বন্ধ]


265

আমি আপনার মতামত শুনতে আগ্রহী, যাতে সামাজিক ক্রিয়াকলাপ প্রবাহটি কার্যকর করার সর্বোত্তম উপায় (ফেসবুক সর্বাধিক বিখ্যাত উদাহরণ)। জড়িত সমস্যা / চ্যালেঞ্জগুলি হ'ল:

  • বিভিন্ন ধরণের ক্রিয়াকলাপ (পোস্টিং, কমেন্টিং ..)
  • বিভিন্ন ধরণের অবজেক্টস (পোস্ট, মন্তব্য, ফটো ..)
  • 1-n ব্যবহারকারী বিভিন্ন ভূমিকার সাথে জড়িত ("ব্যবহারকারী এক্স ব্যবহারকারীর জেড পোস্টে ব্যবহারকারী y এর মন্তব্যে জবাব দিয়েছেন")
  • একই ক্রিয়াকলাপ আইটেমের বিভিন্ন দর্শন ("আপনি মন্তব্য করেছেন .." বনাম "আপনার বন্ধু x মন্তব্য করেছে" বনাম। "ব্যবহারকারী x মন্তব্য করেছে .." => "মন্তব্য" ক্রিয়াকলাপের 3 টি উপস্থাপনা)

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

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

যদিও বেশিরভাগ ইস্যুগুলি প্ল্যাটফর্ম-অজগনস্টিক, তবে আমি কীভাবে রবে অন রুবেলে এমন একটি সিস্টেম প্রয়োগ করব?

উত্তর:


143

আমি এ জাতীয় ব্যবস্থা তৈরি করেছি এবং আমি এই পদ্ধতিটি গ্রহণ করেছি:

নিম্নলিখিত কলামগুলির সাথে ডেটাবেস টেবিল: আইডি, ইউজারআইডি, টাইপ, ডেটা, সময়।

  • ইউজারআইডি হ'ল ক্রিয়াকলাপ উত্পন্ন ব্যবহারকারী user
  • প্রকারটি ক্রিয়াকলাপের ধরণ (যেমন লিখেছেন ব্লগ পোস্ট, যুক্ত ফটো, ব্যবহারকারীর ফটোতে মন্তব্য করা)
  • ডেটা ক্রিয়াকলাপের জন্য মেটা-ডেটাযুক্ত সিরিয়ালযুক্ত বস্তু যেখানে আপনি যা খুশি রাখতে পারেন

এটি অনুসন্ধানগুলি / অনুসন্ধানগুলিকে সীমাবদ্ধ করে, আপনি ফিডগুলিতে, ব্যবহারকারী, সময় এবং ক্রিয়াকলাপের ধরণগুলিতে করতে পারেন তবে একটি ফেসবুক ধরণের ক্রিয়াকলাপের ফিডে এটি আসলে সীমাবদ্ধ নয়। এবং টেবিলে সঠিক সূচকগুলির সাথে লুক্কুলগুলি দ্রুত

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

{id:1, userId:1, type:PHOTO, time:2008-10-15 12:00:00, data:{photoId:2089, photoName:A trip to the beach}}

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

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


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

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

2
আপনাকে সেই মামলাটি ম্যানুয়ালি পরিচালনা করতে হবে। ফটো মুছে ফেলা হলে এটি করা ভাল (ব্যবহারকারীর ফিডে ফিড আইটেমটি সন্ধান করুন এবং এটি মুছুন / আপডেট করুন)।
হিমান

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

4
@ চককেলি: আমি যদি সঠিকভাবে স্মরণ করি, ২০০৮ সালে, যখন আমি উত্তরটি লিখেছিলাম, ফেসবুক ফিডটি মোটেও ওজনযুক্ত ছিল না। এটি আপনার বন্ধুদের সমস্ত ক্রিয়াকলাপের সাথে কেবল কালানুক্রমিক ফিড ছিল।
হিমান

117

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

http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture


21
^^ কারণ সাইটটি দেখার পরে আপনাকে এসওতে ফিরে আসতে হবে। lol
স্টিফেন করউইন

1
দুর্দান্ত উপস্থাপনা যা প্রকৃত উচ্চ-ট্র্যাফিক ওয়েবসাইটে সিস্টেম কীভাবে কাজ করে তা বিশদে ব্যাখ্যা করে।
রামিরামী

44

আমরা আমাদের দৃষ্টিভঙ্গিটি উন্মুক্ত করেছি: https://github.com/tschellenbach/Stream- ফ্রেমওয়ার্ক এই সমস্যাটি সমাধানের লক্ষ্যে এটি বর্তমানে বৃহত্তম ওপেন সোর্স লাইব্রেরি।

স্ট্রিম ফ্রেমওয়ার্ক তৈরি করা একই টিমটি একটি হোস্ট করা এপিআইও সরবরাহ করে, যা আপনার জন্য জটিলতা পরিচালনা করে। কটাক্ষপাত আছে getstream.io নোড, পাইথন, পাগল এবং পিএইচপি জন্য উপলব্ধ ক্লায়েন্টদের আছে।

উপরন্তু এই উচ্চ কর্মক্ষমতা প্রসারণ পোস্টে একটি চেহারা আছে ছিলাম জড়িত নকশা সিদ্ধান্ত কিছু ব্যাখ্যা: http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic- feeds.html

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

ফিড ডিজাইন সম্পর্কে আরও জানার জন্য আমি ফিডির উপর ভিত্তি করে কিছু নিবন্ধ পড়ার সুপারিশ করছি:

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


19

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

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

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


টিম, আপনি কি কোনও উপায়ে উপস্থাপনা বা উপস্থাপকের নাম মনে রাখবেন?
ডানিতা

এটি ওরিলি এবং অ্যাসোসিয়েটের ইগনাইট বোস্টনের উপস্থাপনাটি 3 বা 4 নম্বরে ছিল - আমি বিশ্বাস করি যে উপস্থাপকের কাছে ওরিলির সাথে আরআর স্কেলিং সম্পর্কিত একটি বই ছিল। দুঃখিত আমি আরও নির্দিষ্ট হতে পারে না!
টিম হাওল্যান্ড

থ্যাঙ্কস টিম :) যাইহোক, "ক্ষুদ্র সামাজিক নেটওয়ার্ক" এর অর্থ কী? নির্দিষ্ট সময়ে কতজন ব্যবহারকারী, বা সক্রিয় ব্যবহারকারী?
দানিতা

3
মামলা যে কেউ এটি প্রয়োজন, আমি মনে করি এই উপস্থাপনাটি টিম সম্পর্কে কথা বলা হয়: "ড্যান চক - আপনার সমস্যার আকার স্কেলিং" radar.oreilly.com/2008/09/ignite-boston-4----videos -uplo.html
Danita

এই ক্ষেত্রে ছোট্ট এমন যে "ইভেন্টগুলি থেকে ইভেন্টটি নির্বাচন করুন user এই ব্যবহারকারীর জন্য দৃশ্যমান" ফলাফলটি দ্বিতীয় বা দুই-চিত্রের চেয়ে কয়েক লক্ষ সারি মূল্যবান ইভেন্টের ফলাফল প্রদান করে।
টিম হাওল্যান্ড

12

আপনি যদি পৃথক সফ্টওয়্যার ব্যবহার করতে ইচ্ছুক হন তবে আমি গ্রাফিটি সার্ভারের পরামর্শ দিচ্ছি যা ক্রিয়াকলাপের স্ট্রিমগুলির জন্য সমস্যাটি ঠিক সমাধান করে (neo4j গ্রাফ ডেটা বেসের শীর্ষে বিল্ডিং)।

অ্যালগরিদমগুলি স্ট্যান্ড্যালোন রিস্ট সার্ভার হিসাবে কার্যকর করা হয়েছে যাতে আপনি ক্রিয়াকলাপের স্ট্রিম সরবরাহ করতে নিজের সার্ভারটি হোস্ট করতে পারেন: http://www.rene-pickhardt.de/ographic-server-for-social-activity-streams-released-gplv3 /

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

http://www.rene-pickhardt.de/graphity-an-efficient-graph-model-for-retrieving-the-top-k-news-feeds-for-users-in-social-networks/

উপরের লিঙ্কটিতে আপনি স্ক্রিনকাস্টগুলি এবং এই পদ্ধতির একটি মাপদণ্ড খুঁজে পান (গ্রাফিটি প্রতি সেকেন্ডে 10 কে-এর বেশি স্ট্রিম পুনরুদ্ধার করতে সক্ষম হয় তা দেখায়)।


10

আমি গতকাল এর মতো একটি সিস্টেম বাস্তবায়ন শুরু করেছি, এখানেই আমার কাছে ...

আমি সৃষ্টি StreamEvent properties সহযোগে বর্গ আইডি , ActorId , TypeId , তারিখ , অবজেক্ট- এবং অতিরিক্ত একটি hashtable বিবরণ কী / মান জোড়া। এই দ্বারা ডাটাবেসের মধ্যে প্রতিনিধিত্ব করা হয় StreamEvent সারণী ( আইডি , ActorId , TypeId , তারিখ , অবজেক্ট- ) এবং একটি StreamEventDetails সারণী ( StreamEventId , DetailKey , DetailValue )।

ActorId , TypeId এবং অবজেক্ট- এর জন্য একটি subject-verb অবজেক্ট ঘটনা ক্যাপচার করা (এবং পরে জানতে চাওয়া) অনুমতি দেয়। প্রতিটি ক্রিয়াকলাপের ফলে বেশ কয়েকটি স্ট্রিমইভেন্ট দৃষ্টান্ত তৈরি হতে পারে।

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

এই ইভেন্টগুলি ডাটাবেস থেকে পিছনে টেনে আনার সময় আমি সঠিক স্ট্রিমএন্ট ক্লাস তৈরি করতে একটি ফ্যাক্টরি পদ্ধতি ( টাইপআইডের ভিত্তিতে ) ব্যবহার করি ।

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

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

কোন মন্তব্য ব্যাপকভাবে প্রশংসা করা হবে।


আমি এই জাতীয় সিস্টেমে কাজ করছি এটি সম্পর্কে যে কোনও জ্ঞান নিয়ে আমি আগ্রহী, আপনি কি কখনও শেষ করেছেন?
জেসনডাভিস

দুর্দান্ত উত্তর! উদ্বেগের দুর্দান্ত বিচ্ছেদ, পরিষ্কার এবং মার্জিত!
মোশ

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

10
// আসল ইভেন্ট প্রতি এক এন্ট্রি
ঘটনা {
  আইডি, টাইমস্ট্যাম্প, টাইপ, ডেটা
}

// ইভেন্ট প্রতি এক প্রবেশ, সেই ইভেন্টটি সহ প্রতি ফিড
ইভেন্ট_ফিডস {
  ইভেন্ট_আইডি, ফিড_আইডি
}

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


1
মনে করুন ইভেন্টটি যুক্ত হওয়ার পরে অন্য কাউকে বন্ধু হিসাবে যুক্ত করা হয়েছে, তাদের ফিডে এই ইভেন্টটি দেখার দরকার আছে? তাহলে এটি কার্যকর হবে না
জোশুয়া কিসুন

8

আপনি যদি সিদ্ধান্ত নেন যে আপনি কারাগারে প্রয়োগ করতে চলেছেন তবে সম্ভবত আপনি নীচের প্লাগইনটি দরকারী পাবেন:

ক্রিয়াকলাপের স্ট্রিম : http://github.com/face/activity_streams/tree/master

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


6

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

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

ফেসবুক স্পষ্টতই স্কেলিংয়ের দুর্দান্ত কাজ করেছে তাই আমি আপনাকে সুপারিশ করব যে আপনি তাদের ইঞ্জিনিয়ারিং ব্লগটি পড়ুন, কারণ এতে প্রচুর দুর্দান্ত সামগ্রী রয়েছে -> http://www.facebook.com/notes.php?id=9445547199

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

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

আশাকরি এটা সাহায্য করবে! :)


ঠিক আমার চিন্তাগুলি, আমার কেবলমাত্র আমার চিন্তার বৈধতা প্রয়োজন যা এখন আমি পেয়েছি, চিয়ার্স!
সোহেল

5

এই জাতীয় ক্রিয়াকলাপ সম্পর্কে দুটি রেলকাস্ট রয়েছে:

এই সমাধানগুলিতে আপনার সমস্ত প্রয়োজনীয়তা অন্তর্ভুক্ত নয় তবে এটি আপনাকে কিছু ধারণা দেয়।


1
পাবলিকএকটিভিটি দুর্দান্ত, এবং প্রশ্নে সমস্ত ব্যবহারের কেস পরিচালনা করতে পারে।
ডেভস্টেফেনস

3

আমার মনে হয় প্লুর্কের দৃষ্টিভঙ্গি আকর্ষণীয়: তারা আপনার সম্পূর্ণ টাইমলাইনটি এমন ফর্ম্যাটে সরবরাহ করে যা দেখতে অনেকটা গুগল ফিনান্সের স্টক চার্টের মতো লাগে।

কোনও সামাজিক নেটওয়ার্কিং নেটওয়ার্ক কীভাবে কাজ করে তা দেখার জন্য নিংয়ের দিকে নজর দেওয়া উচিত । ডেভেলপার পৃষ্ঠাগুলি বিশেষত সহায়ক দেখুন।


2

আমি কয়েক মাস আগে এটি সমাধান করেছি, তবে আমি মনে করি আমার বাস্তবায়ন খুব বেসিক।
আমি নিম্নলিখিত মডেলগুলি তৈরি করেছি:

HISTORY_TYPE

ID           - The id of the history type
NAME         - The name (type of the history)
DESCRIPTION  - A description

HISTORY_MESSAGES

ID
HISTORY_TYPE - A message of history belongs to a history type
MESSAGE      - The message to print, I put variables to be replaced by the actual values

HISTORY_ACTIVITY

ID
MESSAGE_ID    - The message ID to use
VALUES        - The data to use

উদাহরণ

MESSAGE_ID_1 => "User %{user} created a new entry"
ACTIVITY_ID_1 => MESSAGE_ID = 1, VALUES = {user: "Rodrigo"}

2

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

আমার সংস্থা সহযোগিতা ( http://www.collabinate.com ) এই উপলব্ধি থেকে বেড়েছে, এবং আমরা এটি অর্জনের জন্য একটি গ্রাফ ডাটাবেসের শীর্ষে একটি স্কেলযোগ্য, উচ্চ পারফরম্যান্স ক্রিয়াকলাপ স্ট্রিম ইঞ্জিন প্রয়োগ করেছি। ইঞ্জিনটি তৈরির জন্য আমরা প্রকৃতপক্ষে গ্রাফি আলগোরিদিম (@ রেনেপিকার্ড্টের প্রাথমিক কাজ থেকে অভিযোজিত যারা এখানে একটি উত্তরও সরবরাহ করেছিল) ব্যবহার করেছিলাম।

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

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