_ProgProg_ Ответов: 0

Лучший способ кэширования таблиц поиска БД?


Эй Ребята,

Я ищу лучший способ кэширования таблиц поиска БД, которые состоят примерно из 75 таблиц.

Я хочу кэшировать данные этих таблиц, чтобы использовать их в своем приложении, поэтому я не буду открывать соединение с БД каждый раз, когда они мне нужны.

Итак, вот что я делаю:

1-я создал I статический класс, содержащий статические свойства для каждой таблицы поиска под названием (MyApplicatioCache).
2 - каждое свойство в (get) я заполняю предполагаемыми данными из БД.
3-Поместите результат в HttpRuntime.Кэш["Имя_свойства"]
4-каждый раз, когда я ПОЛУЧИТЬ в этой таблице поиска данных я делаю проверку, если HttpRuntime.Кэш["Имя_свойства"] Не равно нулю.
5 - если да, то я получаю его от cahce, иначе я получаю его от DB
6-наконец, я вызываю все свойства в событии запуска приложения в global. asax

До сих пор все хорошо но недавно я столкнулся с проблемой производительности и не могу ее решить:

если я хочу, чтобы объект кэша (плательщик) обновлялся из БД, я делаю это:

MyApplicationCache.Payer = null; / / устанавливает HttpRuntime.Cache ["Payer"] = null, поэтому, если я запросил его снова, он перезагружается из БД.

list<payer> payerList = MyApplicationCache.Payer;


Теперь возникает проблема производительности:
1-PayerList в БД - это около 1700 записей.
2 - каждый объект плательщика имеет свойство списка под названием PayerBranches, которое требует зацикливания на всех списках плательщиков и получения плательщиков для каждого элемента списка плательщиков.

// MyApplicationCache Свойство Плательщика:
public static List<LDM.DataEntityTier.Payer> Payer
    {
        get
        {
            if (HttpRuntime.Cache["Payer"] != null) return (List<LDM.DataEntityTier.Payer>)HttpRuntime.Cache["Payer"];
            else
            {
                // request item from its original source
                using (LDM.DataAccess.OracleManager OracleManager = new LDM.DataAccess.OracleManager())
                {
                    OracleManager.OpenConnection();
                    List<LDM.DataEntityTier.Payer> result = new                                         LDM.DataService.PayerService().GetPayersListWithFullName(3, OracleManager, "UTC");
                    //List<LDM.DataEntityTier.Payer> result = new LDM.DataService.PayerService().GetListOfPayer("Order by Name asc", OracleManager ,"UTC");
                    List<PayerBranches> payerBranchesList = new LDM.DataService.PayerBranchesService().GetListOfObject(OracleManager, "UTC");
                    OracleManager.CloseConnection();
                    foreach (Payer payerItem in result)
                    {
                        payerItem.PayerBranches = new List<PayerBranches>();
                        foreach (PayerBranches item in payerBranchesList.FindAll(x => x.PayerID == payerItem.Id))
                        {
                            payerItem.PayerBranches.Add(item);
                        }
                    }
                    // add item to cache 
                    HttpRuntime.Cache["Payer"] = result;
                    return result;
                }
            }
        }
        set
        {
            if (value == null)
            {
                HttpRuntime.Cache.Remove("Payer");
            }
        }
    }


Эта проблема стояла передо мной с каждым свойством, в котором есть список

я не знаю, есть ли лучший способ кэшировать данные или в моем коде есть проблема

Именно так я и работал.

Есть ли лучший способ сделать это???

Kornfeld Eliyahu Peter

Вы слышали об этом - http://msdn.microsoft.com/en-us/library/ms178604.ASPX?

_ProgProg_

Нет, я этого не делал, но я использую Oracle DB.
Должен ли я искать OracleCacheDependency вместо SqlCacheDependency ?

Sampath Lokuge

Да, вы должны.

Sampath Lokuge

Проверьте это : http://docs.oracle.com/html/E10928_01/OracleCacheDependencyClass.htm
еще одна ссылка : http://bumbasblog.blogspot.com/2011/06/oracle-cache-dependency-in-aspnet.html

_ProgProg_

Я читал о зависимости кэша oracle, но думаю, что это почти то же самое, что я делаю?
Так что, может быть, я не понимаю, к чему ты клонишь.
Не могли бы вы быть более конкретными?

_ProgProg_

Есть Идеи?????????????

0 Ответов