Sphinx 3 बनाम Manticore: प्रदर्शन बेंचमार्क

[UPDATE] ताज़ा बेंचमार्क यहाँ है।

हाल ही में लंबे समय से प्रतीक्षित Sphinx 3 रिलीज़ किया गया और 3.0.2 में अपडेट किया गया। इसमें दस्तावेज भंडारण क्षमताएँ, A-इंडेक्स, स्निपेट्स प्री-इंडेक्सिंग और दुर्भाग्यवश अब यह ओपन-सोर्स नहीं है (कम से कम अब, मार्च 2018 में)।

ये सभी बहुत अच्छे विशेषताएँ हैं, लेकिन क्या आप इस बारे में जानते हैं कि इनका Sphinx 3 के प्रदर्शन पर कितना प्रभाव पड़ा है और यह Manticore के प्रदर्शन से कितना भिन्न है? हम भी चाहते हैं!

इसका पता लगाने के लिए हमने एक बेंचमार्क बनाया है जो मापता है:

  • इंडेक्सेशन का समय
  • अधिकतम थ्रूपुट जो Sphinx 3 और Manticore Search 2.6.2 प्रदान कर सकते हैं
  • न्यूनतम लेटेंसी जो दोनों प्रदान कर सकते हैं

बेंचमार्क निम्नलिखित पर आधारित है:

  • luceneutil डेटा उत्पन्न करने और इंडेक्स और क्वेरी सेट तैयार करने के लिए
  • lucene2manticore डेटा को Lucene से Manticore Search / Sphinx फॉर्मेट में परिवर्तित करने के लिए
  • stress-tester बेंचमार्किंग के लिए
  • सर्वर: 8xIntel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz, 64G RAM, HDD
  • OS: Ubuntu 16.04.3 LTS, कर्नेल 4.8.0-45-generic

यहाँ परिणाम हैं:

ms_vs_s3_indexation

ms_vs_s3_throughputms_vs_s3_latency जैसा कि सभी परीक्षण किए गए परिदृश्यों में देखा जा सकता है, Sphinx 3 का इंडेक्सेशन समय बहुत अधिक है और प्रदर्शन: दोनों थ्रूपुट और लेटेंसी में बहुत खराब है। हम मानते हैं कि यह किसी संकलन समस्या के कारण हो सकता है (फिर से, Sphinx 3 ओपन-सोर्स नहीं है इसलिए हम इसे पुनः संकलित नहीं कर सकते) या कुछ सामान्य प्रदर्शन रिसाव हो सकता है जिसे डिबग और ठीक किया जा सकता था यदि स्रोत कोड उपलब्ध होता। यह दुख की बात होगी यदि नई सुविधाएँ प्रदर्शन को इस हद तक खराब कर दें। लेकिन फिर भी, हम Manticore और Sphinx के सभी उपयोगकर्ताओं को चेतावनी देना चाहते हैं कि यदि आप Sphinx 3 में प्रवास करते हैं तो आपको प्रदर्शन गिरने का अनुभव हो सकता है।

कृपया हमें बताएं कि क्या आपके पास Sphinx 3 में प्रवास के विभिन्न परिणाम हैं या Manticore और Sphinx 3 के बीच तुलना है, यह जानकर अच्छा होगा कि किन मामलों में प्रदर्शन गिरता नहीं है।

अगर आपको हमारी मदद की आवश्यकता है तो हमें पिंग करें।


यह है कि आप बेंचमार्क को कैसे दोहरा सकते हैं

ध्यान रखें कि डेटा डाउनलोड और तैयार करने में कुछ घंटे लग सकते हैं।

  1. ऊपर दिए गए सहायक उपकरण स्थापित करें और कॉन्फ़िग्स और स्टॉपवर्ड फ़ाइलें तैयार करें:
mkdir data
mkdir q

git clone http://github.com/mikemccand/luceneutil.git
git clone http://github.com/manticoresoftware/lucene2manticore
git clone http://github.com/Ivinco/stress-tester

cp lucene2manticore/*.conf ./
  1. Manticore Search और Sphinx3 बाइनरीज़ स्थापित करें।
  2. स्रोत डेटा को लाएँ और तैयार करें
cd luceneutil
python src/python/setup.py -download
cd ../data/
xzcat enwiki-20120502-lines-1k.txt.lzma > lucene.tsv

Lucene TSV-जैसे प्रारूप से उचित TSV प्रारूप में डेटा को Manticore Search और Sphinx डेटा स्रोतों के साथ उपयोग करने के लिए परिवर्तित करें:

cd ..
python lucene2manticore/lucene2tsv.py data/lucene.tsv --maxlen 2097152 > data/lc.tsv
head -n 100000 data/lc.tsv >  data/lc100k.tsv
head -n 300000 data/lc.tsv > data/lc300k.tsv
head -n 1000000 data/lc.tsv > data/lc1m.tsv
  1. क्वेरीज़ तैयार करें
python lucene2manticore/lucene2query.py --types simple data/wikimedium500.tasks > q/q-wiki500-simple.txt
python lucene2manticore/lucene2query.py --types ext2 data/wikimedium500.tasks > q/q-wiki500-ext2.txt
python lucene2manticore/lucene2query.py --types simple luceneutil/tasks/wikimedium.10M.datefacets.nostopwords.tasks > q/q-wiki10m-simple.txt
python lucene2manticore/lucene2query.py --types ext2 luceneutil/tasks/wikimedium.10M.datefacets.nostopwords.tasks > q/q-wiki10m-ext2.txt
python lucene2manticore/lucene2query.py --types simple luceneutil/tasks/wikimedium.1M.nostopwords.tasks > q/q-wiki1m-simple.txt
python lucene2manticore/lucene2query.py --types ext2 luceneutil/tasks/wikimedium.1M.nostopwords.tasks > q/q-wiki1m-ext2.txt
cat q/q-wiki*-simple.txt > q/q-simple.txt
cat q/q-wiki*-ext2.txt > q/q-ext2.txt
  1. स्टॉप वर्ड तैयार करें
indexer -c lucene2manticore/sphinx3.conf i2_1m_no_stopwords --buildstops stopwords1k.txt 1000
head -100 stopwords1k.txt > stopwords.txt
  1. डेटा को इंडेक्स करें और ध्यान दें कि इसमें कितना समय लगता है:
./indexer -c lucene2manticore/manticore.conf --all
./indexer -c lucene2manticore/sphinx3.conf --all
  1. खोज डेमन शुरू करें
/path/to/manticore/searchd -c lucene2manticore/manticore.conf
/path/to/sphinx3/searchd -c lucene2manticore/sphinx3.conf
  1. सर्वरों को गर्म करें

यह परीक्षण से पहले खोज डेमन को गर्म करना महत्वपूर्ण है, उदाहरण के लिए, इस तरह:

cd stress-tester
for q in simple ext2; do for p in 8306 7406; do ./test.php --plugin=plain.php --data=../q/q-$q.txt -b=100 -c=8 --port=$p --index=i2_100k_stopwords_100 --maxmatches=100 --csv; done; done;

थ्रूपुट परीक्षण मामले

अब हम जानते हैं कि इंडेक्सेशन में कितना समय लगता है (देखें पृष्ठ 4)। आइए देखें कि Sphinx 3 और Manticore Search कितना थ्रूपुट दे सकते हैं।

100K दस्तावेज़ इंडेक्स के खिलाफ साधारण क्वेरीज़ जिसमें शीर्ष 100 स्टॉप वर्ड हैं:

for port in 7406 8306; do for c in 1 4 6 8 12; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-simple.txt -b=$batchSize -c=$c --port=$port --index=i2_100k_stopwords_100 --maxmatches=1000 --csv; done; done; done

100K दस्तावेज़ इंडेक्स के खिलाफ साधारण क्वेरीज़ जिसमें शीर्ष 1000 स्टॉप वर्ड हैं:

for port in 7406 8306; do for c in 1 4 6 8 12; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-simple.txt -b=$batchSize -c=$c --port=$port --index=i2_100k_stopwords_1k --maxmatches=1000 --csv; done; done; done

Complex queries against 100K docs index with top 100 stop words:

for port in 7406 8306; do for c in 1 4 6 8 12; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-ext2.txt -b=$batchSize -c=$c --port=$port --index=i2_100k_stopwords_100 --maxmatches=1000 --csv; done; done; done

Complex queries against 100K docs index with top 1000 stop words:

for port in 7406 8306; do for c in 1 4 6 8 12; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-ext2.txt -b=$batchSize -c=$c --port=$port --index=i2_100k_stopwords_1k --maxmatches=1000 --csv; done; done; done

Simple queries against 100K docs index with top 100 stop words and morphology enabled:

for port in 7406 8306; do for c in 1 8; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-simple.txt -b=$batchSize -c=$c --port=$port --index=i2_100k_stopwords_100_morphology --maxmatches=1000 --csv; done; done; done

Simple queries against 1M docs index with top 100 stop words:

for port in 7406 8306; do for c in 1 8; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-simple.txt -b=$batchSize -c=$c --port=$port --index=i2_1m_stopwords_100 --maxmatches=1000 --csv; done; done; done

Complex queries against 1M docs index with top 100 stop words:

for port in 7406 8306; do for c in 1 8; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-ext2.txt -b=$batchSize -c=$c --port=$port --index=i2_1m_stopwords_100 --maxmatches=1000 --csv; done; done; done

Simple queries against 1M docs index with top 100 stop words and morphology enabled:

for port in 7406 8306; do for c in 1 8; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-simple.txt -b=$batchSize -c=$c --port=$port --index=i2_1m_stopwords_100_morphology --maxmatches=1000 --csv; done; done; done

Simple queries against 1M docs index with top 100 stop words filtering by attributes to skip half of the documents:

for port in 7406 8306; do for c in 1 8; do for batchSize in 1 100; do ./test.php --plugin=plain.php --data=../q/q-simple.txt -b=$batchSize -c=$c --port=$port --index=i2_1m_stopwords_100 --maxmatches=1000 --filter='ts<1199141654' --csv; done; done; done

मैंटीकोर सर्च इंस्टॉल करें

मैंटीकोर सर्च इंस्टॉल करें