সমস্যাটি:
আমাদের একটি সামাজিক সাইট রয়েছে যেখানে সদস্যরা একে অপরের সাথে সামঞ্জস্য বা মিলের জন্য রেট দিতে পারে। এই user_match_ratings
টেবিলটিতে 220 মিলিয়ন সারি রয়েছে (9 জিগ ডেটা বা সূচীতে প্রায় 20 জিগ)। এই টেবিলের বিরুদ্ধে অনুসন্ধানগুলি নিয়মিতভাবে স্লো.লগ (থ্রেশহোল্ড> 2 সেকেন্ড) এ প্রদর্শিত হয় এবং এটি সিস্টেমে সর্বাধিক ঘন ঘন লগ করা ধীর ক্যোয়ারী:
Query_time: 3 Lock_time: 0 Rows_sent: 3 Rows_examined: 1051
"select rating, count(*) as tally from user_match_ratings where rated_user_id = 395357 group by rating;"
Query_time: 4 Lock_time: 0 Rows_sent: 3 Rows_examined: 1294
"select rating, count(*) as tally from user_match_ratings where rated_user_id = 4182969 group by rating;"
Query_time: 3 Lock_time: 0 Rows_sent: 3 Rows_examined: 446
"select rating, count(*) as tally from user_match_ratings where rated_user_id = 630148 group by rating;"
Query_time: 5 Lock_time: 0 Rows_sent: 3 Rows_examined: 3788
"select rating, count(*) as tally from user_match_ratings where rated_user_id = 1835698 group by rating;"
Query_time: 17 Lock_time: 0 Rows_sent: 3 Rows_examined: 4311
"select rating, count(*) as tally from user_match_ratings where rated_user_id = 1269322 group by rating;"
মাইএসকিউএল সংস্করণ:
- প্রোটোকল সংস্করণ: 10
- সংস্করণ: 5.0.77-লগ
- সংস্করণ বিডিবি: স্লিপাইক্যাট সফ্টওয়্যার: বার্কলে ডিবি 4.1.24: (জানুয়ারী 29, ২০০৯)
- সংস্করণ সংকলন মেশিন: x86_64 version_compile_os: redhat-linux-gnu
সারণী তথ্য:
SHOW COLUMNS FROM user_match_ratings;
দেয়:
╔═══════════════╦════════════╦════╦═════╦════════╦════════════════╗
║ id ║ int(11) ║ NO ║ PRI ║ NULL ║ auto_increment ║
║ rater_user_id ║ int(11) ║ NO ║ MUL ║ NULL ║ ║
║ rated_user_id ║ int(11) ║ NO ║ MUL ║ NULL ║ ║
║ rating ║ varchar(1) ║ NO ║ ║ NULL ║ ║
║ created_at ║ datetime ║ NO ║ ║ NULL ║ ║
╚═══════════════╩════════════╩════╩═════╩════════╩════════════════╝
নমুনা ক্যোয়ারী:
select * from mutual_match_ratings where id=221673540;
দেয়:
╔═══════════╦═══════════════╦═══════════════╦════════╦══════════════════════╗
║ id ║ rater_user_id ║ rated_user_id ║ rating ║ created_at ║
╠═══════════╬═══════════════╬═══════════════╬════════╬══════════════════════╣
║ 221673540 ║ 5699713 ║ 3890950 ║ N ║ 2013-04-09 13:00:38 ║
╚═══════════╩═══════════════╩═══════════════╩════════╩══════════════════════╝
ইনডেক্সে
সারণীতে 3 টি সূচক সেট আপ করা হয়েছে:
- একক সূচক চালু
rated_user_id
- সংমিশ্রিত সূচক
rater_user_id
এবংcreated_at
- সংমিশ্রিত সূচক
rated_user_id
এবংrater_user_id
ব্যবহারকারীর_ম্যাচ_রেটিংগুলি থেকে সূচি প্রদর্শন করুন;
দেয়:
╔════════════════════╦════════════╦═══════════════════════════╦══════════════╦═══════════════╦═══════════╦═════════════╦══════════╦════════╦═════════════════════════╦════════════╦══════════════════╗
║ Table ║ Non_unique ║ Key_name ║ Seq_in_index ║ Column_name ║ Collation ║ Cardinality ║ Sub_part ║ Packed ║ Null ║ Index_type ║ Comment ║
╠════════════════════╬════════════╬═══════════════════════════╬══════════════╬═══════════════╬═══════════╬═════════════╬══════════╬════════╬═════════════════════════╬════════════╬══════════════════╣
║ user_match_ratings ║ 0 ║ PRIMARY ║ 1 ║ id ║ A ║ 220781193 ║ NULL ║ NULL ║ BTREE ║ ║ ║
║ user_match_ratings ║ 1 ║ user_match_ratings_index1 ║ 1 ║ rater_user_id ║ A ║ 11039059 ║ NULL ║ NULL ║ BTREE ║ ║ ║
║ user_match_ratings ║ 1 ║ user_match_ratings_index1 ║ 2 ║ created_at ║ A ║ 220781193 ║ NULL ║ NULL ║ BTREE ║ ║ ║
║ user_match_ratings ║ 1 ║ user_match_ratings_index2 ║ 1 ║ rated_user_id ║ A ║ 4014203 ║ NULL ║ NULL ║ BTREE ║ ║ ║
║ user_match_ratings ║ 1 ║ user_match_ratings_index2 ║ 2 ║ rater_user_id ║ A ║ 220781193 ║ NULL ║ NULL ║ BTREE ║ ║ ║
║ user_match_ratings ║ 1 ║ user_match_ratings_index3 ║ 1 ║ rated_user_id ║ A ║ 2480687 ║ NULL ║ NULL ║ BTREE ║ ║ ║
╚════════════════════╩════════════╩═══════════════════════════╩══════════════╩═══════════════╩═══════════╩═════════════╩══════════╩════════╩═════════════════════════╩════════════╩══════════════════╝
এমনকি সূচিগুলির সাথেও এই প্রশ্নগুলি ধীর।
আমার প্রশ্ন:
এই টেবিলটি / ডেটাটিকে কোনও সার্ভারে অন্য ডেটাবেজে আলাদা করে রাখার জন্য যে মেমরিতে এই ডেটা সংরক্ষণ করার জন্য পর্যাপ্ত পরিমাণে র্যাম রয়েছে তা কি এই প্রশ্নগুলির গতি বাড়িয়ে দেবে? টেবিল / সূচী সেট আপ করা আছে যে কি যাইহোক এই প্রশ্নগুলি আরও দ্রুততর করার জন্য আমরা উন্নতি করতে পারি?
বর্তমানে আমাদের 16 গিগাবাইট মেমরি রয়েছে; তবে আমরা হয় বিদ্যমান মেশিনটিকে 32 গিগাবাইটে আপগ্রেড করতে চাইছি বা একটি নতুন মেশিনকে কমপক্ষে এতটা দিয়ে যুক্ত করব, সম্ভবত শক্ত রাষ্ট্রের ড্রাইভগুলিও।
SELECT QUERY
। আপনি দয়া করে পরামর্শ দিন? পিএস আপনার প্রশ্ন আমাকে এই সম্প্রদায়ে যোগদান করতে বাধ্য করেছে (y);)