Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

Redis AOF fsync (हमेशा) बनाम LSM ट्री

एलएसएम एओएफ है जिसे आप वास्तव में कभी-कभी पढ़ना चाहते हैं। आप कुछ ओवरहेड काम करते हैं ताकि आप इसे बाद में तेजी से पढ़ सकें। 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)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस - हैश का उपयोग करना

  2. कैसे पाश के अंदर async कार्यों के पूरा होने के बाद समारोह कॉल करने के लिए?

  3. ServiceStack.Net Redis:संबंधित ऑब्जेक्ट बनाम संबंधित ऑब्जेक्ट Id को संग्रहीत करना

  4. मुख्य डेटा संरचना प्रकारों के आधार पर शीर्ष रेडिस उपयोग के मामले

  5. जावा के साथ रेडिस (कैश) में एकल मान को इंगित करने वाली एकाधिक कुंजी