मेरे पास डेटाबेस में आइटम की एक सूची है और प्रत्येक आइटम के पास मतदान या नीचे जाने का विकल्प होता है। उन वोटों को अन्य आइटम फ़ील्ड के साथ MySQL में संग्रहीत किया जाता है। उदाहरण के लिए इस तरह से कुछ:कैर से लाने वाले लार्वेल मॉडल एक्सेसर - प्रदर्शन एन्हांसमेंट
Schema::create('items', function ($table) {
$table->increments('id');
$table->text('message');
$table->integer('up_votes')->unsigned()->default(0);
$table->integer('down_votes')->unsigned()->default(0);
$table->timestamps();
});
उपयोगकर्ता हर दिन मतदान/अप कर सकते हैं। जब उपयोगकर्ता वोट देने का निर्णय लेता है तो मैं एक दिन के लिए memcached के अपने निर्णय को स्टोर करता हूं और तदनुसार फ़ील्ड (up_votes या down_votes) में से एक को बढ़ाता हूं।
$voteKey = sprintf('%s-%s', $request->ip(), $item->id);
if (!Cache::has($voteKey)) {
$vote = $request->get('vote');
$this->item->increment($vote ? 'up_votes' : 'down_votes');
Cache::put($voteKey, $vote, (60*24));
}
अगला मैं इस बारे में जानकारी रखना चाहता हूं कि कुछ उपयोगकर्ता ने कितना मतदान किया था। मैंने मॉडल में एक्सेसर बनाया:
public function getVoteAttribute($value)
{
$voteKey = sprintf('%s-%s', Request::ip(), $this->id);
return $this->attributes['vote'] = Cache::get($voteKey);
}
protected $appends = ['vote'];
क्या यह स्मार्ट करना है या लंबी सूची के साथ कुछ प्रदर्शन समस्याएं हो सकती हैं? यदि 100 आइटम लौटाए जाते हैं, तो प्रति उपयोगकर्ता memcached के लिए 100 कनेक्शन हैं। मैं इसे कैसे सुधार सकता हूं या ऐसा कुछ है जिसके बारे में मुझे चिंता नहीं करना चाहिए क्योंकि कैश सर्वर इस समस्या के कनेक्शन को बिना किसी समस्या के संभाल सकता है।