在我们的.net应用程序中,我们需要从数据库加载一些数据(键/值对)并在整个应用程序中使用它。我们不希望为每个请求(键)命中数据库以一次又一次地获取值。我想知道什么是标准和有效的方法?
感谢所有回复直到现在......我认为,在我的情况下(数据不是很大),我将在一些静态keyvaluepair中加载数据并在需要时使用它。我希望将其添加到业务层,这里是我的简化结构,在基类中我添加了一个静态构造函数并且取消了keyvaluepair:
class BaseClass
{
//declare static keyvaluepair (kvp)
static BaseClass()
{
//load kvp from database
}
public void print(string key)
{
//use kvp to get the value for the key
}
}
class ChildA : BaseClass
{
public void somethingA()
{
//call print(key)
}
}
class ChildB : BaseClass
{
public void somethingB()
{
//call print(key)
}}
class main
{
public void GetChildA()
{
ChildA a = new ChildA();
a.somethingA();
}
public void GetChildB()
{
ChildB b = new ChildB();
b.somethingB();
}
}
从前端我从Main类调用该方法。我想确保当我调用a.somethingA()或b.somethingB()时,kvp应该只在最初加载一次。后续调用应该只从内存中获取数据。以上方法似乎是正确的还是我搞砸了?
答案 0 :(得分:1)
在程序启动时在Hashtable中加载表的所有数据(如果它不是太大)。
然后,您的应用程序可以从全局/静态Hashtable变量中非常快速地访问键值对。
答案 1 :(得分:1)
自然而然地有两种方法
当然,您需要在内存中保存最近请求的对,这样即使您实施了第一个策略,也不会为相同的值对进行连续的SQL调用。
答案 2 :(得分:1)
这取决于收藏品的大小。如果它是一个相对较小的集合,您可能希望在应用程序启动时加载它并从那里读取它。但是,如果它是一个更大的集合,或者只是在正常的使用模式下读取了一些键,那么在内存容器中编写自己的内容将会有所帮助,该容器知道如何查询数据库以获取密钥。然后你可以做类似
的事情NodeCollection<T>["keyofitem"]
NodeCollection类将维护一个内部键/值集合,将查询传递的“keyofitem”,如果存在则返回,如果不存在,则发生数据库查找,获取值,添加到内部收集并返回给来电者。