हाल ही में हमने मंटिकोर 3.0.0 जारी किया जिसमें बहुत सारे सुधार शामिल हैं, जिनमें कुछ नए ऑप्टिमाइजेशन शामिल हैं जो प्रदर्शन में सुधार करते हैं। इस लेख में, हम नए संस्करण के प्रदर्शन की तुलना स्पैंक्स 3.1.1 के प्रदर्शन से करना चाहते हैं।
TL;DR
मंटिकोर दिखाता है:
- कुछ मामलों में लगभग 2x उच्च खोज प्रदर्शन, विशेषकर लंबे प्रश्नों के साथ
- और कम, लेकिन अब भी सभी अन्य परीक्षणों में बेहतर प्रदर्शन
- केवल अनुक्रमण समय को छोड़कर जहां स्पैंक्स 2% तेज है
परीक्षण वातावरण
जैसा कि पहले जब हमने मंटिकोर 2.7 बनाम स्पैंक्स 3 का बेंचमार्क किया हम हैकर न्यूज से 11.6 मिलियन उपयोगकर्ता टिप्पणियों के डेटासेट पर बेंचमार्क करेंगे।
बेंचमार्क निम्नलिखित परिस्थितियों में आयोजित किया गया था:
- हैकर न्यूज क्यूरेटेड टिप्पणियों का डेटासेट 2016 में CSV प्रारूप में
- OS: उबंटू 18.04.1 LTS (बायोनिक बीवर), कर्नेल: 4.15.0-47-जेनरिक
- CPU: इंटेल(R) कोर(TM) i7-3770 CPU @ 3.40GHz, 8 कोर
- 32G RAM
- HDD
- डॉकर संस्करण 18.09.2
- अनुक्रमण और खोज के लिए बेस इमेज - उबंटू:बायोनिक
- मंटिकोर सर्च को डॉकर में बनाया गया था, स्पैंक्स बाइनरी साइट से डाउनलोड किए गए थे क्योंकि इसके लिए कोई ओपन सोर्स नहीं था
- स्ट्रेस-टेस्टर बेंचमार्किंग के लिए
कॉन्फ़िगरेशन मंटिकोर और स्पैंक्स के लिए समान है:
source full
{
type = csvpipe
csvpipe_command = cat /root/hacker_news_comments.prepared.csv|grep -v line_number
csvpipe_attr_uint = story_id
csvpipe_attr_timestamp = story_time
csvpipe_field = story_text
csvpipe_field = story_author
csvpipe_attr_uint = comment_id
csvpipe_field = comment_text
csvpipe_field = comment_author
csvpipe_attr_uint = comment_ranking
csvpipe_attr_uint = author_comment_count
csvpipe_attr_uint = story_comment_count
}
index full
{
path = /root/idx_full
source = full
html_strip = 1
mlock = 1
}
searchd
{
listen = 9306:mysql41
query_log = /root/query.log
log = /root/searchd.log
pid_file = /root/searchd.pid
binlog_path =
qcache_max_bytes = 0
}
अनुक्रमण
अनुक्रमण में मंटिकोर के लिए 1263 सेकंड और स्पैंक्स के लिए 1237 सेकंड लगे:
मंटिकोर:
indexing index 'full'...
collected 11654429 docs, 6198.6 MB
creating lookup: 11654.4 Kdocs, 100.0% done
creating histograms: 11654.4 Kdocs, 100.0% done
sorted 1115.7 Mhits, 100.0% done
total 11654429 docs, 6198580642 bytes
total <b>1263.497 sec</b>, 4905890 bytes/sec, 9223.94 docs/sec
total 22924 reads, 1.484 sec, 238.4 kb/call avg, 0.0 msec/call avg
total 11687 writes, 11.773 sec, 855.1 kb/call avg, 1.0 msec/call avg
स्पैंक्स:
indexing index 'full'...
collected 11654429 docs, 6198.6 MB
sorted 1115.7 Mhits, 100.0% done
total 11654429 docs, 6.199 Gb
total <b>1236.9</b> sec, 5.011 Mb/sec, 9422 docs/sec
तो इस डेटासेट और अनुक्रमण स्कीमा पर मंटिकोर स्पैंक्स की अपेक्षा ~2% धीमा अनुक्रमण करता है।
प्रदर्शन परीक्षण
दोनों इंस्टेंसों को परीक्षण से पहले गर्म किया गया था। अनुक्रमण फ़ाइलें निम्नलिखित थीं:
मंटिकोर:
root@bench# ls -lah /var/lib/docker/volumes/64746c338de981014c7c1ea93d4c55f55e13de63ac9e49c2d31292bb239a82b6/_data
total 4.7G
drwx------ 2 root root 4.0K May 14 09:03 .
drwxr-xr-x 3 root root 4.0K May 14 09:01 ..
-rw-r--r-- 1 root root 362M May 13 17:22 idx_full.spa
-rw-r--r-- 1 root root 3.1G May 13 17:31 idx_full.spd
-rw-r--r-- 1 root root 90M May 13 17:31 idx_full.spe
-rw-r--r-- 1 root root 628 May 13 17:31 idx_full.sph
-rw-r--r-- 1 root root 29K May 13 17:22 idx_full.sphi
-rw-r--r-- 1 root root 6.5M May 13 17:31 idx_full.spi
-rw------- 1 root root 0 May 14 09:03 idx_full.spl
-rw-r--r-- 1 root root 1.4M May 13 17:22 idx_full.spm
-rw-r--r-- 1 root root 1.1G May 13 17:31 idx_full.spp
-rw-r--r-- 1 root root 59M May 13 17:22 idx_full.spt
स्पैंक्स:
root@bench /var/lib/docker/volumes # ls -lah /var/lib/docker/volumes/bd28586b5102ff91d4c367f612e2f7b1fe0a066917c8e0b4636d203dd3ba5b0b/_data
total 4.6G
drwx------ 3 root root 4.0K May 14 09:04 .
drwxr-xr-x 3 root root 4.0K May 14 09:03 ..
-rw-r--r-- 1 root root 362M May 13 19:09 idx_full.spa
-rw-r--r-- 1 root root 3.1G May 13 19:17 idx_full.spd
-rw-r--r-- 1 root root 27M May 13 19:17 idx_full.spe
-rw-r--r-- 1 root root 648 May 13 19:17 idx_full.sph
-rw-r--r-- 1 root root 6.3M May 13 19:17 idx_full.spi
-rw-r--r-- 1 root root 8 May 13 19:09 idx_full.spj
-rw-r--r-- 1 root root 1.4M May 13 19:09 idx_full.spk
-rw------- 1 root root 0 May 14 09:04 idx_full.spl
-rw-r--r-- 1 root root 1.1G May 13 19:17 idx_full.spp
परीक्षण 1 - संग्रह से शीर्ष 1000 शर्तों को संसाधित करने का समय
सबसे पहले, चलो एक साधारण परीक्षण करते हैं - यह पता करें कि संग्रह से शीर्ष 1000 शर्तों को ढूंढने में कितना समय लगता है:
for n in `head -1000 hn_top.txt|awk '{print $1}'`; do
mysql -P9306 -hhn_$engine -e "select * from full where match('@(comment_text,story_text,comment_author,story_author) $n') limit 10 option max_matches=1000" > /dev/null
done
परिणाम हैं: स्पैंक्स के लिए 77.61 सेकंड और मंटिकोर के लिए 71.46 सेकंड।
तो इस परीक्षण में मंटिकोर सर्च स्पैंक्स सर्च की तुलना में 8.59% तेज है।
परीक्षण 2 - शीर्ष 1000 बार-बार आने वाली शर्तें संग्रह से समूहों में विभाजित (शीर्ष 1-50, शीर्ष 50-100 आदि)
अब देखते हैं कि स्पैंक्स और मंटिकोर शीर्ष 1000 बार-बार आने वाली शर्तों के समूहों के उप-समूहों से शर्तों को संसाधित करने में कैसे भिन्न हैं।
प्रश्नों को बेहतर समझने के लिए, यहां प्रत्येक समूह के लिए कुछ यादृच्छिक प्रश्न उदाहरण हैं:
1-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
बारे में | प्राप्त करें | बात | उपयोग किया गया | अलग | उच्च |
मेरी | काम | हूँ | ऑफ़ | सिस्टम | बनाएँ |
अधिक | चीजें | प्रतिकृत करता है | निश्चित | नहीं किया | अगला |
300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
दिन | कीमत | 20 | चाहा | मूल्य | स्वयं |
लिखें | सर्वर | देखभाल | साइट्स | g | फ़ाइल |
कुछ नहीं | फोन | कहानी | हाल ही में | मॉडल | स्टोर |
600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
भर्ती | स्मार्ट | स्वागत है | चुनाव | ले लिया गया | विषय |
क्लाइंट | इच्छा | चाहता है | pg | विवरण | कोर |
iphone | कारण | पर्यावरण | आम तौर पर | css | सोच रहा था |
900-950 | 950-1000 | ||||
पूर्ण | कीवर्ड | ||||
संसाधन | देरी | ||||
विचार | ipad |
Manticore Sphinx से 6.8% तेज है 95p लेटेंसी की दृष्टि से और 12.2% थ्रूपुट की दृष्टि से।
परीक्षण 3 - संग्रह से शीर्ष 1000 सामान्य शब्दों के समूहों के अनुसार + समूह 1-100 से 1 शब्द
आइए देखें कि जब आपके पास एक बहुत सामान्य शब्द और एक कम सामान्य शब्द होता है तो यह कैसे काम करता है। उदाहरण हैं:
1-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
अधिक होना | वह रहा है | तरीका हो रहा है | एक बंद | बस प्रारंभिक | थे भुगतान |
उन्हें जैसा | कर सकते अन्य | कर सकते हैं | सोचें अपना | सचमुच और कुछ | अगर डिजाइन |
के बारे में था | बनाना तब | था आदि | से ऐप | थोड़ा | पर अभी भी |
300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
बस या तो | एक इंटरनेट | जो नेट | आप स्थान | होगा प्रोग्राम | t मूलतः |
नहीं दूर | द्वारा सामाजिक | t अतीत | एक साइट्स | एक कई | है को |
1 लिखें | है का अर्थ | ज़्यादातर लड़के | कोई बात नहीं | है स्थान | अगर मूलतः |
600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
तरीका प्रोग्रामर | देखें शीर्षक | क्योंकि शब्द | सोचें मैक | ज़्यादातर महंगा | वक्त बदला |
था कठिन | मेरे सफल | कम ग्राहक | सुना गया | पर बेहद | रुका भोजन |
उनके सप्ताह | से यसी | क्योंकि ठीक | भी डेस्कटॉप | के लिए समझना | ज़्यादातर ट्रैफिक |
900-950 | 950-1000 | ||||
अगर पार्टी | सचमुच काफी | ||||
जब गंभीर | यहाँ सर्वर | ||||
सोचें गति | था खोना |
वाह, मंटिकोरे थ्रूपुट के लिए स्पिनक्स से 106% तेजी से और 95 प्रतिशत लैटेंसी के मामले में औसतन 91.8% तेज है।
परीक्षण 4 - संग्रह से शीर्ष 1000 बार-बार आने वाले शब्द समूहों द्वारा टूटे हुए + समूह 1-100 से 1 शब्द, दोनों शब्दों को वाक्यांश बनाने के लिए उद्धरणों में शामिल किया गया
1-50 | 50-100 | 100-150 | 150-200 | 200-250 | 250-300 |
"वे सभी" | "सोचते हैं भी" | "कि कोड" | "हम ऐप" | "से देते हैं" | "द्वारा उपयोगकर्ता" |
"http आप" | "जैसे रहे हैं" | "है हमारे" | "जैसे लेख" | "उपयोग बना" | "वास्तव में कम से कम" |
"द्वारा कुछ" | "उपयोग काम" | "नहीं अच्छा" | "मैं ऐप" | "कर सकता था अलग" | "अगर समझें" |
300-350 | 350-400 | 400-450 | 450-500 | 500-550 | 550-600 |
"अन्य डेवलपर" | "द्वारा निर्माण" | "चाहते बनाना" | "वहाँ सामने" | "कोई सरकार" | "उन्हें विचार करें" |
"का आइडिया है" | "मैं पायथन" | "जो दिया गया" | "ने पूरी तरह से" | "की कीमत है" | "वे शुरुआत कर रहे हैं" |
"तरिका फेसबुक" | "होना संपादित" | "उपर लिंक" | "उपयोग स्थान" | "वास्तव में सौदा" | "अब जल्दी" |
600-650 | 650-700 | 700-750 | 750-800 | 800-850 | 850-900 |
"बीते सप्ताह" | "उपर इंजीनियरिंग" | "पूछना रहा है" | "एस पी" | "जो सीएसएस" | "वहाँ प्लस" |
"बनाना एपीआई" | "हम अपेक्षा करते हैं" | "वास्तव में इच्छुक" | "टी कदम" | "क्योंकि मजबूत" | "के लिए यातायात" |
"था नोट" | "होते खुद" | "http डिग्री" | "http डेस्कटॉप" | "नहीं अन्यथा" | "बहुत भोजन" |
900-950 | 950-1000 | ||||
"एस लाना" | "बहुत मांग" | ||||
"यह चुनें" | "सभी उदाहरण" | ||||
"अब लाना" | "होना तर्क" |
यहाँ मैन्टिकोर औसतन तेज है: थ्रूपुट के लिए 11.8% और 95% लेटेंसी के लिए 21.2%।
टेस्ट 5 - 600-750 समूह से प्रत्येक के लिए 2 शर्तें विभिन्न समवर्तीता के तहत
यह परीक्षण विभिन्न क्वेरी समवर्तीता में थ्रूपुट में अंतर दिखाने के लिए है। हमें जो मिलता है वह है:
मैन्टिकोर सभी समवर्तीता में औसतन 31% तेजी से है और 95% लेटेंसी के साथ थ्रूपुट 28% कम देता है।
टेस्ट 6 - अलग-अलग समूहों से 3-5 शर्तें
यह परीक्षण लंबे क्वेरी (3-5 शर्तें) द्वारा खोज में अंतर दिखाने के लिए है:
- 100-200 400-500 800-900 समूहों से संबंधित 3 शर्तें
- 100-200 300-400 500-600 800-900 समूहों से संबंधित 4 शर्तें
- 100-200 300-400 500-600 800-900 900-1000 समूहों से संबंधित 5 शर्तें
क्वेरी उदाहरण:
3 शर्तें | 4 शर्तें | 5 शर्तें |
कार्य आत्म-रिहाई | उपयोग करते हुए धन्यवाद दूसरा 12 | स्विच शुरू हुआ बी 12 जगहें |
प्रत्येक साइटों की कमी | स्कूल के चारों ओर मॉडल लिंक | स्विच गिटहब क्लास नफरत हाल ही में |
his aren avoid | through jobs amount effect | switch facebook office absolutely english |
Manticore’s throughput is 77.6% higher and the 95p latency is 81.4% lower.
TEST 7: 3 AND terms from groups 300-600 and 1 NOT from 300-400
In this test we add a NOT term to a 3-term query:
Throughput - 66.6% higher, 95p latency - 57% lower.
Conclusions
Sphinx shows few seconds better indexation performance on a 21 minutes indexation.
As for the search performance which as we think is much more important Manticore 3.0.0 demonstrates much higher throughput and lower latency in all the tests. The whole test is fully dockerized and
open sourced in our github
. The detailed results can be found
here
. We’ll appreciate if you run the same tests on your hardware or add different tests to the suite and let us know the results.
If you’re thinking of migrating to Manticore 3 please read this article . We understand that your indexes may be big and to ease the migration process there’s a new tool index_converter which can easily convert your existing Sphinx 2 / Manticore 2 indexes to new Manticore 3 index format.
In case you have any issue, question or comments feel free to contact us:
- on twitter
- by sending an email to [email protected]
- posting on our Forum
- chatting with us in our Community Slack
- complaining on how bad is everything on our bug tracker in GitHub