我目前正在使用Python制作网络应用程序。它将包含并使用许多关于几件事情的不变数据。这些数据将在不同程度上用于大多数应用程序。
我最初的计划是将这些数据放在一个包含所有其他变化数据的数据库中,但对我来说这似乎过多而且是一个潜在且不必要的阻塞点(因为在大多数情况下,相同的数据将被多次查询/以各种组合方式查询页面加载/交互)。
我已经重写了它,以便数据现在存储在几个字典词典中(即在内存中),基本上是常量,通过函数从中访问数据。数据看起来有点像这样:
{
0: {
'some_key': 'some_value',
'another_key': 'another_value',
...
},
...
}
这个内存有效吗?有没有更多尝试和真实/ pythonic /只是更好(在速度,内存使用等方面)做这种事情的方式?使用数据库实际上是最好的方法吗?
答案 0 :(得分:4)
这种方法没有什么特别的错误,但我会注意到一些问题:
为什么嵌套词典?为什么不是一个扁平的字典,甚至是一个充满变量的模块?
如果这些是“对象”数据,为什么不将它们存储在实际对象中呢?同样,这些可以存在于模块或dict中的变量中。
您的网络框架可能已经针对此特定问题提供了解决方案。
答案 1 :(得分:0)
这似乎是一种非常明智的存储参考数据的方法,只要您有足够的内存来存储您需要的数据。我同意这应该比从数据库中读取更快,因为数据已经存储在内存中并进行排序以便有效访问。
如果您不想将此数据实际存储在源代码中,可以将其存储在json文件(json.dump()中以写入文件,并将json.load()存储回读取)。但是你想在应用程序启动时将它读入内存,然后将其保存在内存中,而不是每次都返回到文件中。