Структура на данните Memory Mapped или DB? (милиони артикули)

Имам структура от данни, която по същество е търсене на някои изчисления, чието изчисляване отнема много време (100 ms) и трябва да се използва отново и отново. Имам приблизително 6 000 000 от тези изчисления и искам да ги заредя в паметта, когато приложението ми стартира (ще ги изчисля предварително всички).

Въпросът е мога ли да запазя това като картографиран файл с памет (речник на нещо) или трябва да го запазя в db и след това да го заредя в ram при стартиране на програмата? Колко бърза би била двоичната сериализация?

Какви са моите възможности?


person Luke Belbina    schedule 08.08.2011    source източник
comment
Моля, имайте предвид, че не се нуждаете от C# .NET в заглавието си, тъй като за това са етикетите.   -  person John Saunders    schedule 09.08.2011
comment
Във въпроса ви нищо не подсказва, че простото им съхраняване в масив или списък‹› няма да бъде най-доброто решение. Шест милиона обикновено се побират, всичко останало, което обмисляте, просто ще го направи по-бавно.   -  person Hans Passant    schedule 09.08.2011


Отговори (2)


Двоичната сериализация е бърза, особено ако трябва да я заредите само веднъж. Скоростта на зареждане от база данни наистина зависи от това как са структурирани данните. Предимството на използването на база данни е лесното управление. Ако искате лесно да управлявате, променяте, проследявате промените или използвате тези стойности с множество клиенти, тогава DB ще бъде правилният начин. Ако никога няма да се променят, един файл би бил достатъчен.

person Kratz    schedule 08.08.2011

Трябва да опитате различни подходи и да измерите сами. Няма друг път за решаване на проблеми с производителността. Имайте предвид, че трябва да имате предвид някаква конкретна цел (като 1 секунда за зареждане/1 ms за търсене).

Настроики:

  • изчисляване на всички стойности при стартиране и sotre в някакво търсене (предварително разпределен масив/речник)
  • изчисляване при поискване и sotre в някакво търсене (предварително разпределен масив/речник)
  • изчислете предварително и заредете некомпресирани (имайте предвид, че количеството данни, които имате, е голямо и ще отнеме видимо 1-3 секунди за зареждане)
  • изчислете предварително и заредете при поискване
  • изчислете предварително и заредете компресирани данни

Бих препоръчал да опитате да изчислите всички стойности при зареждане и да видите дали работи достатъчно бързо - най-вероятно най-лесният начин.

person Alexei Levenkov    schedule 09.08.2011