سؤال

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

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

المحلول

لست متأكدًا من أنني أتابعك تمامًا، ولكن ألق نظرة على TList.

في دلفي 7 على الأقل، يتم تنفيذه كمجموعة من المؤشرات.يمكنك استخدام خاصية السعة لتخصيص القائمة مسبقًا مسبقًا إذا كنت تعرف عدد النتائج التي ستعود.

سوف تنمو القائمة تلقائيًا إذا نفدت المساحة.يعتمد مقدار نموها على حجم القائمة.

قم بإلقاء نظرة على مصدر وحدة الفصول الدراسية لمعرفة ما تفعله.

يحرر:أيضًا في D2009 تمت إضافة الدعم العام إلى TList مما يجعله أفضل قليلاً في الاستخدام.

نصائح أخرى

ربما تكون أفضل طريقة هي احتواء مجموعة من المؤشرات على السجلات.لن تضطر إلى التعامل مع الإزاحات، في هذه الحالة، وستكون عمليات البحث ذات وقت ثابت.

لماذا لا تستخدم نسخة MEMORY من قاعدة البيانات الخاصة بك؟لدى معظمها طريقة للاحتفاظ بجدول كامل في الذاكرة، وعادة ما تتضمن الكلمة الأساسية SQL MEMORY.يمكنك نسخ الجدول من القرص إلى جدول الذاكرة، ومن ثم يمكنك استخدام جميع عمليات قاعدة البيانات العادية بسرعة الذاكرة.أعلم أن هذا يعمل بشكل جيد في DBISAM.

التالي mj2008, يمكنك استخدام TCLientDataset بدلاً من مصفوفة السجلات.ما هو حجم تلك النتائج؟

سأستخدم TList، وقم بتخزين المؤشرات في السجل الخاص بك.

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top