首页 > 解决方案 > 如何在启动 .Net Core Web API 服务应用程序时从 mysql db 加载数据?

问题描述

我是 .Net Core 和 MySql 的新手。

我正在尝试开发一个服务应用程序,该应用程序将使用 .Net Core 和 MySql 通过 REST api 调用向其他应用程序提供多种类型的数据。

我无法弄清楚如何在应用程序启动时加载所有数据,以便在触发 api 调用时,可以使用应用程序中已加载的数据生成响应,而不是为每个请求从数据库中获取它。

请提出一种有效的方法来实现这一目标。

标签: c#mysql.net-coredata-access-layerrest

解决方案


我将通过使用一个处理与数据库的连接的类来解决它,然后您可以为每种想要访问数据的方式提供方法。然后在第一次获取时,您从数据库中收集所需的数据,然后将其缓存以供下次调用。这样一来,如果不需要,就不需要将所有内容都保存在内存中。

但是如果你真的需要全速预加载(如果可能的话)是要走的路。然后,这在很大程度上取决于您的数据结构。我可能会将所有数据加载到类中,以便它们已经采用正确的格式,然后使用带有适当键的字典从字典中获取数据。问题在于是否有可能以多种不同的方式获取数据。如果您有包含人员的数据库,您可以创建一个包含有关人员的所有信息的 Person 类,然后使用电子邮件作为唯一标识符,因此当您的其他应用程序需要使用电子邮件的人员的所有信息时,字典将非常快。但是,如果您还想获取城市中的所有人或具有特定名字的人,那么字典会很慢,因为您必须遍历所有项目以查找城市或名称。

我会花时间研究所有搜索的方式,如果你有一个 id 作为一个人的唯一标识符,你可以在字典中使用它,然后为每个搜索使用单独的字典。所以一个字典,其中键是电子邮件,值指向字典中所有用户的唯一 ID。然后是另一个城市字典,其中字典包含该城市中所有人员的 ID 列表,依此类推。通过这种方式,您正在创建一种类似于数据库用于快速获取数据的索引。

但这实际上取决于您的数据。是不是很复杂。数据库中有很多项目吗?是否有很多表会有自己的搜索?您可以通过多种方式搜索项目吗?是否允许使用通配符进行搜索?

问题是您正在尝试使用真实数据库作为起点来创建临时内存数据库。并且不可能问某人创建数据库的最有效方法。为了能够回答您将需要更多信息。

如果您需要更快的速度,您还可以预序列化所有响应并将它们保存为字符串,以便您可以立即发送 json(或您现在将使用的格式)。问题是您需要的速度越快,代码就会变得越“丑陋”,并且您将为此付出内存消耗。


推荐阅读