【问题标题】:How to load data from mysql db on start up .Net Core Web API service application?如何在启动 .Net Core Web API 服务应用程序时从 mysql db 加载数据?
【发布时间】:2020-10-13 23:19:08
【问题描述】:

我是 .Net Core 和 MySql 的新手。

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

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

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

【问题讨论】:

  • 您好,根据您的数据,加载所有内容可能不是一个好主意。但是,如果您真的想要这样做(如果您这样做,应用程序可能需要很长时间才能启动),例如,您可以在启动的配置服务部分中的任何其他位置执行此操作。

标签: c# mysql .net-core data-access-layer rest


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 非常感谢您的回复。您上面阐述的内容是我脑海中的模糊想法。每种类型的表中存储了大约 15 种不同类型的实体。可以有一个 DataServiceControl 类,它将使用 appsetting.json 中的 connectionString 并将数据加载到字典中。现在我需要弄清楚如何构造它并设计接口/抽象类,然后由 DataServiceClass 为每个实体实现。是的,服务应用程序会消耗大量内存,但这里的想法是快速检索数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2013-08-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多