الوصول المتزامن إلى قاعدة البيانات أو ملف الذاكرة من عمليات متعددة ، هل هذا ممكن؟

StackOverflow https://stackoverflow.com/questions/4233132

سؤال

ها هو وضعي. لديّ تطبيق خادم مصمم لعدة مستخدمين لاستخدامه ، لذلك هناك الكثير من عمليات القراءة/الكتابة في نفس الوقت. والردود تحتاج إلى أن تكون سريعة.

حاليًا ، قمت بتخزين جميع البيانات في الذاكرة ، لذا فإن عملية قراءة/كتابة البيانات بالسرعة التي توقعناها. لمنع قفل البيانات من التسبب في مشكلات لي ، استخدمت قائمة الانتظار لربط طلبات المستخدمين ، وجعلها تأتي إلى عملية المعالج من قبل واحد.

لكن سرعان ما وجدت مشكلة. يمكن للبرنامج التعامل مع طلب واحد فقط في وقت واحد. حتى برنامج Penchmark Timer الذي أبلغ عني أنه استخدم صفر MS للمعالجة ، ولكن لا تزال هناك حدود للتعامل مع الطلبات في ثانية واحدة. لقد تعاملت الآن مع حوالي 100 مرة في الثانية.

لذلك أنا أسعى للحصول على بعض الأساليب أكثر تزامن ، مثل 8 عمليات للتعامل مع الطلبات الثمانية في نفس الوقت. سيكون ذلك لطيفًا جدًا. ولكن هناك مشكلة أكبر في مشاركة البيانات ، لا أريد إعادة اختراع العجلة. لذلك راجعت MongoDB ، redis و sqlite.

ها هي واجبي المنزلي ، صححني إذا كنت مخطئًا ، شكرًا جزيلاً

MongoDB و Redis سريعون حقًا كما ذكروا ، لكنهم استخدموا نفس الآلية ، يمكنهم التعامل مع طلب واحد مرة واحدة ، وهذا ليس ما أسعى إليه.

لذا ، فإن SQLite أكثر قربًا ، يمكن لعمليات متعددة أن تفتح نفس ملف DB في نفس الوقت والقراءة ، والألم هو قفل الكتابة الخاص به (لا أفضل إلى أي مدى يعمل القفل الجديد في SQLite3).

هذا سؤالي ، هل هناك حل قوي وجيد لهذا السيناريو؟ إذا قمت بفصل عملية الكتابة في واحدة ، فهل ستساعد؟

شكرا على أي تعليق

هل كانت مفيدة؟

المحلول

الحل مع mongodb هو Sharding. Mongodb Sharding يسمح لك بشكل أساسي بإلقاء المزيد من المعالجات في المشكلة. المزيد من المعالجات = المزيد من المواضيع كتابة.

كل مثيل MongoDB لديه فقط موضوع كتابة واحد. Sharding يعطي المزيد من الحالات وبالتالي يسمح لمزيد من الكتابة.

ومع ذلك ، هناك مشكلة أكبر هنا. إنتاجية القرص.

لقد كان لدي مونغو يركض أكثر من 1000 إدراج / ثانية إذا كان الأمر برمته في ذاكرة الوصول العشوائي. لكن معظم الناس يستخدمون Mongo كقاعدة بيانات مع دعم ملف فعلي. لذلك إذا كنت تستخدم Mongo للكتابة الثقيلة حقًا ، فيجب أن تكون مستعدًا باستخدام الأقراص التي يمكن أن تقبل هذا المستوى من الإنتاجية.

مرة أخرى ، فإن الطريق حول مشكلة إنتاجية القرص هو التقويم. قم ببناء المزيد من الشظايا وستحصل على عدد أقل من الكتابة / القرص وأقل قفلًا في كل مكان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top