何时将数据放入硬编码而不是数据库?

时间:2014-02-11 21:07:25

标签: asp.net-mvc database entity-framework

我是ASP.NET MVC的新手,并且有一个概念问题。说我正在为航空公司开发一个网站。我在哪里放置目的地列表?我一直都需要它并且它不经常改变所以把它放在硬代码中会是最快的(对吧?)。另一方面,数据属于数据库(对吗?)。

将它放入数据库并在服务器启动时将其全部加载到列表中是否有意义?如果是,则可以理解任何指向正确数据结构的快速指针(例如,静态类?)。

2 个答案:

答案 0 :(得分:3)

嗯,你不应该硬编码这个清单,这是肯定的;无论何时需要添加或删除目标,您都需要重新编码和重新部署应用程序(这些事情的变化比您想象的更频繁!)

所以绝对是某种类型的数据库(另外考虑你可能需要提供某种管理界面让航空公司添加/删除/禁用目的地等)。

就数据结构而言,以及是否将其全部保存在内存中,您可能需要首先考虑一下数据的形状。因为它可能不仅仅是一个简单的目的地列表 - 它更可能是出发点和目的地的图表 - 一个出发点可能有许多目的地,目的地本身可能是出发点。

即。出发地/目的地之间有很多甚至很多的关系。

考虑到这一点,您可以看到数据的大小实际上可能比您想象的要大得多。因此,不是试图将这一切都缓存在内存中,最好的方法就是

  • 客户访问该网站,页面通过Ajax点击JSON端点(例如Web服务),填充他们的出发点列表,从“你想去哪里”下拉列表中选择< / p>

  • 客户选择一个出发点,第二个 ajax呼叫仅检索该出发点的当前可用目的地列表,并将其加载到“您想去哪里?”框。

一旦用户开始加载目标点,你总是可以使用缓存,但我个人不会预先加载它 - 这也意味着你需要一种方法来在列表更改时刷新缓存,而不会降低申请。

答案 1 :(得分:2)

一般情况下,您不需要硬编码任何您不想重新部署应用程序以进行更改的内容,请记住,当突然需要重新部署时,您可能会在项目中途进行更改。

具体来说,不要硬编码。您将它放在数据库中并使用缓存来保持数据响应。有很多方法可以实现缓存,最适合您的方法取决于您将如何呈现数据。如果它是一个AJAX-y下拉列表,那么你需要一个带有缓存头的JSON端点,这样浏览器就可以保留自己的缓存,无论你是否可以将ASP.NET缓存用于你自己的代码。

编辑:谈论静态类 - 这可能没什么问题,但请记住,这意味着无论服务器可能遇到什么内存问题,数据都会占用空间。使用缓存层可以让服务器保持或转储,具体取决于数据的使用频率以及当前的数据内存限制。在您的情况下,此特定数据似乎是您的应用程序的组成部分,因此使用静态类可能是有益的。确保你没有从多个线程中扩展该类,或者你可能会遇到一些奇怪的行为。

编辑编辑:只要您的应用程序处于活动状态,它就会占用内存。如果服务器有很多问题,可能只需要将整个应用程序关闭以保持自身运行。缓存至少会首先转储而不是下降。