InnoDB এর সাথে ফুলটেক্সট অনুসন্ধান


93

আমি একটি উচ্চ-ভলিউম ওয়েব অ্যাপ্লিকেশন বিকাশ করছি, যেখানে এর অংশবিশেষ আলোচনার পোস্টগুলির একটি মাইএসকিউএল ডাটাবেস যা সহজেই 20M + সারি পর্যন্ত বাড়তে হবে।

আমি মূলত টেবিলের জন্য MyISAM ব্যবহার করে পরিকল্পনা ছিল (বিল্ট-ইন-এর জন্য অন্য আইকন বেছে নিতে ক্ষমতা ), কিন্তু চিন্তার সমগ্র টেবিল লক হওয়া একটি একক লেখার অপারেশন কারণে আমাকে তোলে ঝিলমিল। সারি-স্তরের লকগুলি আরও অনেক বেশি অর্থবোধ করে (বিশাল টেবিলগুলির সাথে কাজ করার সময় InnoDB এর অন্যান্য গতির সুবিধার কথা উল্লেখ না করে)। সুতরাং, এই কারণে, আমি InnoDB ব্যবহার করতে বেশ দৃ determined়প্রতিজ্ঞ।

সমস্যাটি হ'ল ... InnoDB এর অন্তর্নির্মিত পুরো পাঠ্য সন্ধানের ক্ষমতা নেই।

আমার কি তৃতীয় পক্ষের অনুসন্ধান সিস্টেমের সাথে যাওয়া উচিত? ভালো লেগেছে Lucene (C ++) / স্পিংক্স ? আপনার কোন ডাটাবেস নিনজ এর কোন পরামর্শ / গাইডেন্স আছে?লিঙ্কডইনের জুইটি ( লুসিনের উপর ভিত্তি করে) এই মুহুর্তে সেরা বিকল্পটির মতো দেখাচ্ছে... রিয়েলটাইম ক্ষমতাগুলির চারপাশে নির্মিত হয়েছে (এটি আমার প্রয়োগের জন্য বেশ সমালোচিত)) আমি কিছুটা অন্তর্দৃষ্টি ছাড়াই কমিটিকে দ্বিধা বোধ করছি ...

(এফওয়াইআই: সীমান্ত পরিবেশন করতে পিএইচপি ব্যবহার করে উচ্চ-মেমরি রিগ সহ ইসি 2 তে যাচ্ছি)


উত্তর:


50

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

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

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


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

আপনাকে দু'পক্ষের ধন্যবাদ; দুর্দান্ত প্রতিক্রিয়া। আমি সোলারের ডক্সের মাধ্যমে থাম্বিং করছি, এবং এটি দেখতে দুর্দান্ত সমাধান বলে মনে হচ্ছে। এটি বেশ কয়েকটি বিশাল ওয়েবসাইটকেও শক্তিশালী করে, আমি দেখি। আমার মনে হয় সোলারের টিকিট। ধন্যবাদ বন্ধুরা. এছাড়াও, আপনার মাইআইএসএএম মাথা ব্যথার বিষয়ে শিখতে ভাল, আয়ান ... ভবিষ্যতে তাদের মনে রাখা ভাল হবে। অন্যান্য প্রকল্পগুলিতে, আমি পুরো টেক্সট বৈশিষ্ট্যটি ব্যবহার করার চেষ্টা থেকে দূরে সরে যাব।
brianreavis

11
ভাবছিলেন কি আয়ান "ক্লুসিনের ভাল হবে তা অনুমান করবেন না" বলে কী করেছে? ক্লুসিন কোর দলের একজন হিসাবে আমি এতটা উদ্দেশ্যমূলক নাও হতে পারি, তবে আমার কাছে মনে হয় যে কোনও জাভা লাইব্রেরির সি ++ বন্দরটি তার ছাদ দিয়ে পারফরম্যান্স বাড়িয়ে তুলবে। আমি কাউকে সুপারিশ করব যে তারা যে পণ্যটি অসম্মান করছে তাতে কমপক্ষে এক নজরে না রেখে এ জাতীয় মন্তব্য পোস্ট না করা।
synhershko

4
আপনি যখন মাইআইএসএএম-তে গালিগালাজ করেন তখন আপনার আরও সুনির্দিষ্ট হওয়া দরকার। "অফ দ্য রেলস" খুব অস্পষ্ট এবং সম্ভবত যেহেতু আপনি যে বিল্ডটি ব্যবহার করছেন সেটিতে সম্ভবত একটি বাগ রয়েছে fixed
বোবোবোবো

6
তবে যদি আপনার সার্ভারে সফ্টওয়্যার ইনস্টল করার বিকল্প না থাকে - তবে এই ক্ষেত্রে কী বিকল্প রয়েছে?
acme

57

মাইআইএসএএম থেকে সাধারণ ফেজিংয়ের পাশাপাশি, ইনোডিবি ফুল-পাঠ্য অনুসন্ধান (এফটিএস) অবশেষে মাইএসকিউএল 5.6.4 রিলিজে উপলব্ধ available

Https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html এ প্রচুর সরস বিবরণ ।

অন্য ইঞ্জিনগুলির প্রচুর বিভিন্ন বৈশিষ্ট্য রয়েছে, এটি একটি ইনোডিবি, সুতরাং এটি নেটিভ (যার অর্থ একটি আপগ্রেডের পথ রয়েছে), এবং এটি এটিকে একটি সার্থক বিকল্প হিসাবে পরিণত করে।


4
নিবন্ধ লিঙ্কটি 403 নিষিদ্ধ
মার্কো ডেমাইও

11

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

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

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


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

3

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

মাইএসকিউএল এর গতি এবং পূর্ণ পাঠ্য অনুসন্ধান তাদের ব্যবহারকারীদের পরিবেশন করতে ক্রেগলিস্ট সক্ষম করেছে .. ক্র্যাগলিস্ট প্রতি সেকেন্ডে 60০ টি অনুসন্ধানের হারে প্রতিমাসে প্রায় 50 মিলিয়ন অনুসন্ধানের জন্য মাইএসকিউএল ব্যবহার করে। "

সম্পাদনা করুন

নীচের মতামত হিসাবে, ক্রেগলিস্ট মনে হচ্ছে ২০০৯ এর গোড়ার দিকে কিছুটা সময় স্পিনক্সে চলে গেছে


আমি যে নিবন্ধটি লিঙ্ক করেছি তাতে
স্পিনিক্সের

কেস স্টাডি পিডিএফ 2004 এর মতো দেখাচ্ছে, সেই সময়টিতে প্রতি মাসে 50 এম অনুসন্ধান করা হত। স্ফিংক্স পৃষ্ঠাটিতে প্রতিদিন 50 এম অনুসন্ধানের কথা বলা হয়েছে , যা সম্ভবত তারা কোনও উত্সর্গীকৃত অনুসন্ধান সমাধানে স্যুইচ করার কারণ ব্যাখ্যা করে।
হালিল Özgür

1

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



0

আপনার স্পিনক্সে একবার দেখা উচিত। এটা চেষ্টা করার যোগ্য। এটি সূচকগুলি দ্রুত দ্রুত এবং এটি বিতরণ করা হয়। আপনার এটি দেখতে হবে (http://www.percona.com/webinars/2012-08-22-full-text-search-throwdown) ওয়েবমিনারে। এটি অনুসন্ধান সম্পর্কে কথা বলে এবং কিছু ঝরঝরে মানদণ্ড রয়েছে। আপনি এটি সহায়ক মনে হতে পারে।



0

যে কেউ মাইএসকিউএল / মারিয়াডিবি (অর্থাত সেন্টোস ব্যবহারকারীগণ) এর পুরানো সংস্করণে আটকে আছে যেখানে ইনোডিবি ফুলটেক্সট অনুসন্ধানগুলিকে সমর্থন করে না, ইনোএনডিবি টেবিলগুলি ব্যবহার করার সময় আমার সমাধানটি আমি যে জিনিসটি অনুসন্ধান করতে চেয়েছিলাম তার জন্য একটি পৃথক মাইএসএএম টেবিল তৈরি করা ছিল।

উদাহরণস্বরূপ, আমার মূল InnoDB টেবিলটি productsবিভিন্ন কী এবং রেফারেন্সিয়াল অখণ্ডতা সহ ছিল। আমি তখন একটি product_searchদুটি সাধারণ ক্ষেত্র সমন্বিত একটি মাইআইএসএএম টেবিল তৈরি করেছি product_idএবং product_nameযেখানে পরবর্তীটি কোনও FULLTEXTসূচীতে সেট করা আছে । উভয় ক্ষেত্রই কার্যকরভাবে প্রধান productসারণীতে যা আছে তার একটি অনুলিপি ।

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

মাইআইএসএএম টেবিলের বিষয়বস্তুগুলি ট্রিগার বা অ্যাপ্লিকেশনটির মডেলের মাধ্যমে আপ টু ডেট রাখা যেতে পারে।

আমি আপনার কাছে একাধিক টেবিল রয়েছে যাতে পুরো টেক্সট প্রয়োজন হলে আমি এটির সুপারিশ করব না, তবে একক টেবিলের জন্য এটি আপগ্রেড না করা অবধি যথেষ্ট কাজের মতো বলে মনে হচ্ছে।

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