সমস্যাটি:
আমাদের একটি সামাজিক সাইট রয়েছে যেখানে সদস্যরা একে অপরের সাথে সামঞ্জস্য বা মিলের জন্য রেট দিতে পারে। এই 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);)