রেডিসে নামের দৈর্ঘ্যের প্রভাব কী?


129

উদাহরণস্বরূপ, আমি রেডিসে ভার্বোজের নামগুলি ব্যবহার করতে চাই set-allBooksBelongToUser:$userId

এটি ঠিক আছে নাকি এর প্রভাব কার্যকারিতা?

উত্তর:


198

আপনি যে কীটি ব্যবহার করার কথা বলছেন তা আসলে এত দীর্ঘ নয়।

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

রেডিস নামক একটি বেঞ্চমার্ক ইউটিলিটি নিয়ে আসে redis-benchmark, আপনি যদি এসসিআর / রেডিস-বেঞ্চমার্ক.কে "জিইটি" পরীক্ষাটি পরিবর্তন করেন যাতে সেগুলি কেবল "ফু" হয় তবে আপনি একটির পরে সংক্ষিপ্ত কী পরীক্ষা চালাতে পারবেন make install:

diff --git a/src/redis-benchmark.c b/src/redis-benchmark.c
--- a/src/redis-benchmark.c
+++ b/src/redis-benchmark.c
@@ -475,11 +475,11 @@
         benchmark("MSET (10 keys)",cmd,len);
         free(cmd);

-        len = redisFormatCommand(&cmd,"SET foo:rand:000000000000 %s",data);
+        len = redisFormatCommand(&cmd,"SET foo %s",data);
         benchmark("SET",cmd,len);
         free(cmd);

-        len = redisFormatCommand(&cmd,"GET foo:rand:000000000000");
+        len = redisFormatCommand(&cmd,"GET foo");
         benchmark("GET",cmd,len);
         free(cmd);

শর্ট কী "foo" এর পরবর্তী 3 টি রানের জন্য জিইটি পরীক্ষার গতি এখানে রয়েছে:

59880.24 requests per second
58139.53 requests per second
58479.53 requests per second

উত্সটি আবার সংশোধন করার পরে এবং "সেট-অলবুকস বেলংটোজার: 1234567890" তে কীটি পরিবর্তন করার পরে জিইটি পরীক্ষার গতি এখানে রয়েছে:

60240.96 requests per second
60606.06 requests per second
58479.53 requests per second

"কীভাবে আবারও" Chanসুম্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস্লোরিপস ফ্লোরসস ইউরিপস ইউরোপসিলোরিসপ্লোরসিউলরিপসিলোরিপস্লুরিওসিসমোরোরিসপ্লোরসিউলরিপস্লুরিওসিসপ্লোরইউরিওসিলোরিসপ্লোরসোমরিওসিলোরিসপ্লুরিস্লোরিপস্লুরসোরিওসিলোরিসপ্লোরস্লোরিপস্লুরিওরিয়াসপ্লুরিস্লোরিপস্লোরিপসিলোরিয়াসপ্লুরিস্লোরিপস্লোরিপসালুওরিয়াসপ্লোরস্লোরিপসিলোরিসপ্লুরিস্লোরিপস্লোরিপসালুওরিয়াসলুইসরিওরিয়াসপ্লোরস্লোরিপসপ্লোরইরিওরিজ।

58479.53 requests per second
58139.53 requests per second
56179.77 requests per second

সুতরাং এমনকি সত্যই দীর্ঘ দীর্ঘ কীগুলি রেডিসের গতিতে বড় প্রভাব ফেলবে না। এবং এটি জিইটি, একটি ও (1) অপারেশন। আরও জটিল অপারেশনগুলি এর চেয়ে কম সংবেদনশীল হবে be

আমি মনে করি যে কীগুলি রয়েছে যা স্পষ্টভাবে চিহ্নিত করে যে কোন মানগুলিকে তারা বহন করে তা কোনও সংক্ষিপ্ত গতির কর্মক্ষমতা ছাড়িয়ে যায় যা আপনি সংক্ষিপ্ত কীগুলি থেকে বেরিয়ে আসতে পারেন।

আপনি যদি এটিকে আরও এগিয়ে নিতে চান, -r [keyspacelen]তবে রেডিস-বেঞ্চমার্ক ইউটিলিটিতে একটি প্যারামিটার রয়েছে যা এলোমেলো কী তৈরি করতে দেয় (যতক্ষণ না তাদের ': র্যান্ড:' সেগুলিতে রয়েছে), আপনি কেবল প্রিফিক্সটির আকার বাড়িয়ে নিতে পারেন আপনি যে দৈর্ঘ্যের চেয়েছিলেন টেস্টিং কোড


6
এটি কতটা জায়গা নেয় তা সম্পর্কে কি? আমার যদি সত্যিই দীর্ঘ এই চাবিগুলির 1 মিলিয়ন থাকে তবে এটি কি স্মৃতিতে এত বড় হবে বা ডিস্কে স্থির থাকবে?
ডেরেক অরগান

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

আমরা সাধারণত স্বল্পতম কী দৈর্ঘ্যগুলি ব্যবহার করি এবং আমাদের ডোমেন অবজেক্ট এবং তাদের পদ্ধতিতে "পঠনযোগ্যতা" সরিয়ে ফেলি। সরাসরি রেডিসে রক্ষণাবেক্ষণ এবং পরিদর্শন করতে সহায়তা করতে আমরা আমাদের কীগুলিতে শর্ট নেমস্পেসগুলিও ব্যবহার করি।
xentek

26

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


4
রেডিস হ'ল সংজ্ঞা অনুসারে একটি সর্ব-ইন-মেমরি স্টোর, তাই প্রথম বাক্যটি আমার কাছে বিভ্রান্ত হয়।
লি গ্রিসম

5
@ বমথেনি, যদি আমি আপনার ক্যোয়ারীটি সঠিকভাবে বুঝতে পারি তবে রেডিস মূলত একটি মেমরির স্টোর এবং এটি অধ্যবসায় সমর্থন করে
নাজিব

5

আমি কোনও প্রশ্নের সাথে এই প্রশ্নের উত্তর দিতে পারি না। তবে আমি এ সম্পর্কে কিছু প্রশ্ন জিজ্ঞাসা করতে পারি এবং কিছু পর্যবেক্ষণও দিতে পারি।

আমি মনে করি এটা সুস্পষ্ট যে অত্যন্ত দীর্ঘ কী (নাম) এবং / অথবা মানগুলি যদি এগুলি ব্যবহার করা যায় তবে সামগ্রিক কর্মক্ষমতাতে পারফরম্যান্সের প্রভাব ফেলবে। এই প্রভাবগুলি ক্লায়েন্টে, নেটওয়ার্কে বা সার্ভারে থাকতে পারে। সুতরাং আপনার থেকে টেনে আনার প্রথম প্রশ্নটি হ'ল:

রেডিস এবং আপনার ক্লায়েন্টদের মধ্যে কী এবং মানগুলি কতক্ষণ থাকতে পারে?

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

এটি প্রশ্নের উত্তর দেয় না (কীগুলি দীর্ঘকাল হতে পারে এবং কোন পয়েন্টে পারফরম্যান্সে সনাক্তযোগ্য প্রভাব রয়েছে)। যাইহোক, এটি আমাদের প্রশ্নের পদ্ধতির বিষয়ে একটি সূত্র দেয়।

এই দুটি নিবন্ধের লেখক কোড লিখেছেন এবং এটি পরীক্ষা করেছেন ... এবং ফলাফলগুলি আঁকেন।

আমরা অনুমানের সব ধরণের করতে পারে। আমরা কোডটি দেখতে পারি এবং এটি যুক্তি দিয়ে দেখার চেষ্টা করতে পারি।

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


-7

ভেরিয়েবল নামের দৈর্ঘ্য কার্য সম্পাদনকে প্রভাবিত করবে বলে আমি মনে করি না, ভেরিয়েবল একই ডেটাটাইপের জন্য যেভাবে আপনার সর্বাধিক দৈর্ঘ্যের দৈর্ঘ্য অতিক্রম না করে সেখানে স্থান নেবে।


6
চার্লি: এগুলি আসলে "ভেরিয়েবল" নয় এগুলি কী। 1 এবং 30 বা 100 এর মধ্যে কীগুলির জন্য বা এমনকি 255 টি অক্ষরের জন্য কোনও সনাক্তকরণযোগ্য পারফরম্যান্স প্রভাব থাকতে পারে না। কয়েক কিলোবাইটের কীগুলি তৈরি করুন ... বা দশকের কিলোবাইটে এবং আমি কল্পনা করেছি আপনি কোনও পারফরম্যান্স হিট পরিমাপ করতে সক্ষম হবেন (1K এবং 70K এর মধ্যে কিছুটা আপনি অ্যাডিটোনাল নেটওয়ার্কের ওভারহেডকে আঘাত করবেন যেহেতু মূল আকারটি হবে আপনার এমটিইউ ছাড়িয়ে যাবে এবং একাধিক প্যাকেটের উপর দিয়ে ডেটা ভাঙতে হবে ... টিসিপি এবং খুব কমপক্ষে পুনরায় অপ্রয়োজনীয় ওভারহেড লাগবে)।
জিম ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.