سؤال

أنا أستخدم SqlServer لتشغيل تطبيق WPF، وأنا أستخدم حاليًا NHibernate وأقرأ جميع البيانات مسبقًا بحيث يتم تخزينها مؤقتًا لأسباب تتعلق بالأداء.يعمل هذا مع تطبيق عميل واحد، ولكنني كنت أتساءل عما إذا كانت هناك قاعدة بيانات في الذاكرة يمكنني استخدامها حتى أتمكن من مشاركة المعلومات عبر تطبيقات متعددة على نفس الجهاز.من الناحية المثالية، سيكون هذا أسفل مكدس NHibernate الخاص بي، لذلك لن يلزم تغيير الكود الخاص بي.على نحو فعال، أنا أتطلع إلى نقل قاعدة البيانات الخاصة بي من تنسيقها التقليدي على الخادم لتكون قاعدة بيانات في الذاكرة على العميل.

ملاحظة: أحتاج فقط إلى تحديد الوظيفة.

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

المحلول

http://www.db4o.com/ يمكن أن يكون صديقك!

نصائح أخرى

سأكون مندهشًا للغاية إذا كنت بحاجة إلى تحميل جميع معلوماتك في الذاكرة.أقول هذا لأنني، كمثال واحد فقط، أعمل على تطبيق ويب في الوقت الحالي والذي (لأسباب مختلفة) يقوم بتحميل آلاف السجلات على العديد من الصفحات.هذا هو PHP + MySQL.وحتى مع ذلك يمكنه القيام بذلك وعرض الصفحة في أقل من 100 مللي ثانية.

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

أولاً وقبل كل شيء، عليك التأكد من أن لديك نموذج بيانات علائقية جيدًا:واحد يفسح المجال لاستفسارات الأداء.وهذا فن بقدر ما هو علم.

أيضًا، قد يعجبك NHibernate ولكن ORMs ليست دائمًا الخيار الأفضل.هناك بعض الحالات الأساسية، على سبيل المثال، التي ستكون لغة SQL المرمزة يدويًا متفوقة فيها إلى حد كبير.

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

ولوضع هذا في نصابه الصحيح، فإن الأوقات الوحيدة التي كنت بحاجة فيها للقيام بذلك كانت على الأنظمة التي تحتاج إلى إجراء ملايين المعاملات يوميًا.

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

بافتراض أنك فعلت كل ما سبق وما زلت بحاجة إليه، يبدو لي أن ما تحتاجه هو حل ذاكرة التخزين المؤقت أو الشبكة.هنا نظرة عامة على حلول شبكة/مجموعة Java لكن العديد منها (مثل Coherence وmemcached) تنطبق على .Net أيضًا.هناك خيار آخر لـ .Net سرعة.

يجب الإشارة والتأكيد على أن شيئًا مثل NHibernate يكون متسقًا فقط طالما أنه لا يوجد شيء يقوم بتحديث قاعدة البيانات خارجيًا وأن هناك عملية واحدة فقط ممكّنة لـ NHibernate (باستثناء الحلول المجمعة).إذا كان هناك تطبيقان لسطح المكتب على جهازي كمبيوتر مختلفين يقومان بتحديث نفس قاعدة البيانات باستخدام NHibernate، فلن يعمل التخزين المؤقت ببساطة لأن وحدات الثبات لن تكون على علم بالتغييرات التي يجريها الآخر.

سرعة هو من وجوه عملية خادم التخزين المؤقت صممت من قبل مايكروسوفت أن تفعل الكثير جدا ما تريد على الرغم من انها فقط في شكل CTP في الوقت الراهن.

وأعتقد أن هناك أيضا مغلفة لأعطها، والتي يمكن أن تستخدم أيضا لكائنات ذاكرة التخزين المؤقت.

ويمكنك استخدام HANA، الطبعة صريحة. يمكنك تحميله مجانا ، انها في الذاكرة، عمودي ويسمح لمزيد من قدرات التحليلات مثل تحليل النص، الجغرافية المكانية أو التنبؤية. يمكنك أيضا الوصول مع ODBC، JDBC، نود.جي إس مكتبة بنك التعمير والإسكان، REST واجهات برمجة التطبيقات وغيرها.

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