سؤال

أنا أكتب تطبيقا ولدي بعض قيم القاموس في العديد من اللغات المختلفة. أعلم أنني أستطيع استخدام Gettext، ولكن يجب تجميع ملفات Afair بعد التحرير، وأريد السماح لدى قاموس تحرير المستخدم، ولا يمكنني إعادة ترجمة ملفات .mo على الخادم. لا أعرف عدد اللغات التي سيتم استخدامها، لذلك يجب أن يكون الحل مرن.

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

لهذا السبب، أفكر في تخزين قيم القاموس مرة واحدة، وتحديثها فقط بعد تحرير قيمة فيه. لسوء الحظ، تعذر استخدام المتغيرات الثابتة PHP، لأنها تموت في نهاية الطلب. لا أريد استخدام الجلسة، لأنني سأضطر إلى إجراء مكالمات DB لكل مستخدم. من الناحية المثالية، أود استخدام المتغيرات الثابتة كما في جافا - يعيشون طالما أن التطبيق يعيش في JVM.

ما هو أفضل حل لتخزين بعض المتغيرات (في مثالتي - القواميس وإدخالات القاموس، وما إلى ذلك) لفترة طويلة (وليس حسب الطلب) لجميع المستخدمين (وليس لكل مستخدم)؟

أنا أفكر في صنع شيء مثل DictionaryValues فئة، تسلسلها مرة واحدة، ثم نجح في كل طلب. في كل مرة يقوم فيها شخص ما في القاموس، سيتم تسلسل الكائن مرة أخرى وستحل محل الكائن المتسلسل القديم. سيحدث تحرير الدورة نادرا ما تتم مقارنة عدد المرات التي ستقرأ فيها قيم القاموس.

هل هذا حل جيد؟ هل يجب علي تسلسل الكائن وتخزينه على القرص أو كتابةه إلى قاعدة البيانات؟ أي واحد أسرع؟

ربما تجد حلا أفضل لهذه المشكلة؟

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

المحلول

يمكنك تجربة PHP APC.. وبعد إنه سريع وسهل الاستخدام. يمكنك تسلسل / تحيز كائنات وتخزين / الحصول عليها بسهولة.

في بيئة موزعة، يمكنك تنفيذ نفس الوظائف باستخدام memcache.

نصائح أخرى

بعض الخيارات إذا كان memcache / APC أكثر من اللازم أو غير ممكن:

يمكنك "ترجمة" قيم قاعدة البيانات الخاصة بك بشكل متكرر في ملف PHP وتضمين ذلك. سيكون ذلك أسرع تحليل ومعالجة الحكمة.

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

يوجد خيارين:

  1. يمكنك استخدام الذاكرة المشتركة (shmop. أو memcache.).
  2. يمكنك ذاكرة التخزين المؤقت لملف أو قاعدة بيانات - حاول الكمثرى :: cache_lite. (أو APC. كما تقترح jldupont)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top