एलएसएम एओएफ है जिसे आप वास्तव में कभी-कभी पढ़ना चाहते हैं। आप कुछ ओवरहेड काम करते हैं ताकि आप इसे बाद में तेजी से पढ़ सकें। Redis को डिज़ाइन किया गया है ताकि आप इसे कभी भी या केवल एक विशेष मामले में न पढ़ें। दूसरी ओर, कैसेंड्रा अक्सर अनुरोधों को पूरा करने के लिए इसे पढ़ता है।
और जिसे Redis धीमा कहता है, वह वास्तव में Cassandra जैसे db के लिए बहुत तेज़ है।
===========================अद्यतन करें
यह पता चला है, मैं बहुत जल्दी निष्कर्ष पर पहुंच गया। डिजाइन के दृष्टिकोण से उपरोक्त सब कुछ सत्य है, लेकिन कार्यान्वयन इतना भिन्न है। Cassandra के पूर्ण स्थायित्व का दावा करने के बावजूद, यह fsync
. नहीं है प्रत्येक लेन-देन पर और ऐसा करने के लिए बाध्य करने का कोई तरीका नहीं है (लेकिन प्रत्येक लेनदेन को fsynced किया जा सकता है)। मैं जो सबसे अच्छा कर सकता था वह है 'पिछले fsync के बाद कम से कम 1ms बैच मोड में fsync'। इसका मतलब है कि 4 थ्रेड बेंचमार्क के लिए मैं इसका उपयोग कर रहा था, यह प्रति fsync 4 राइट्स कर रहा था और थ्रेड्स fsync के होने की प्रतीक्षा कर रहे थे। दूसरी ओर, रेडिस ने प्रत्येक लेखन पर fsync किया, इसलिए 4 गुना अधिक बार। अधिक थ्रेड और तालिका के अधिक विभाजन के साथ, कैसेंड्रा और भी बड़ा जीत सकता है। लेकिन ध्यान दें, आपके द्वारा वर्णित उपयोग का मामला विशिष्ट नहीं है। और अन्य वास्तुशिल्प मतभेद (कैसंड्रा विभाजन में अच्छा है, काउंटरों पर रेडिस अच्छा है, एलयूए और अन्य) अभी भी लागू होते हैं।
नंबर:
रेडिस कमांड:set(KEY + (tstate.i++), TEXT);
कैसेंड्रा कमांड:execute("insert into test.test (id,data) values (?,?)", state.i++, TEXT)
जहां TEXT = "Wake up, Neo. We have updated our privacy policy."
Redis fsync हर सेकेंड, HDD
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.shared localhost thrpt 15 97535.900 ± 2188.862 ops/s
97535.900 ±(99.9%) 2188.862 ops/s [Average]
(min, avg, max) = (94460.868, 97535.900, 100983.563), stdev = 2047.463
CI (99.9%): [95347.038, 99724.761] (assumes normal distribution)
Redis fsync प्रत्येक लेखन, HDD
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.shared localhost thrpt 15 48.862 ± 2.237 ops/s
48.862 ±(99.9%) 2.237 ops/s [Average]
(min, avg, max) = (47.912, 48.862, 56.351), stdev = 2.092
CI (99.9%): [46.625, 51.098] (assumes normal distribution)
Redis, fsync हर राइट, NVMe (Samsung 960 PRO 1tb)
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.shared remote thrpt 15 449.248 ± 6.475 ops/s
449.248 ±(99.9%) 6.475 ops/s [Average]
(min, avg, max) = (441.206, 449.248, 462.817), stdev = 6.057
CI (99.9%): [442.773, 455.724] (assumes normal distribution)
कैसेंड्रा, हर सेकेंड fsync,HDD
Benchmark Mode Cnt Score Error Units
CassandraBenchMain.write thrpt 15 12016.250 ± 601.811 ops/s
12016.250 ±(99.9%) 601.811 ops/s [Average]
(min, avg, max) = (10237.077, 12016.250, 12496.275), stdev = 562.935
CI (99.9%): [11414.439, 12618.062] (assumes normal distribution)
कैसेंड्रा, प्रत्येक बैच को fsync करें, लेकिन कम से कम 1ms, HDD प्रतीक्षा करें
Benchmark Mode Cnt Score Error Units
CassandraBenchMain.write thrpt 15 195.331 ± 3.695 ops/s
195.331 ±(99.9%) 3.695 ops/s [Average]
(min, avg, max) = (186.963, 195.331, 199.312), stdev = 3.456
CI (99.9%): [191.637, 199.026] (assumes normal distribution)