c# - 如何在启动 .Net Core Web API 服务应用程序时从 mysql db 加载数据?
问题描述
我是 .Net Core 和 MySql 的新手。
我正在尝试开发一个服务应用程序,该应用程序将使用 .Net Core 和 MySql 通过 REST api 调用向其他应用程序提供多种类型的数据。
我无法弄清楚如何在应用程序启动时加载所有数据,以便在触发 api 调用时,可以使用应用程序中已加载的数据生成响应,而不是为每个请求从数据库中获取它。
请提出一种有效的方法来实现这一目标。
解决方案
我将通过使用一个处理与数据库的连接的类来解决它,然后您可以为每种想要访问数据的方式提供方法。然后在第一次获取时,您从数据库中收集所需的数据,然后将其缓存以供下次调用。这样一来,如果不需要,就不需要将所有内容都保存在内存中。
但是如果你真的需要全速预加载(如果可能的话)是要走的路。然后,这在很大程度上取决于您的数据结构。我可能会将所有数据加载到类中,以便它们已经采用正确的格式,然后使用带有适当键的字典从字典中获取数据。问题在于是否有可能以多种不同的方式获取数据。如果您有包含人员的数据库,您可以创建一个包含有关人员的所有信息的 Person 类,然后使用电子邮件作为唯一标识符,因此当您的其他应用程序需要使用电子邮件的人员的所有信息时,字典将非常快。但是,如果您还想获取城市中的所有人或具有特定名字的人,那么字典会很慢,因为您必须遍历所有项目以查找城市或名称。
我会花时间研究所有搜索的方式,如果你有一个 id 作为一个人的唯一标识符,你可以在字典中使用它,然后为每个搜索使用单独的字典。所以一个字典,其中键是电子邮件,值指向字典中所有用户的唯一 ID。然后是另一个城市字典,其中字典包含该城市中所有人员的 ID 列表,依此类推。通过这种方式,您正在创建一种类似于数据库用于快速获取数据的索引。
但这实际上取决于您的数据。是不是很复杂。数据库中有很多项目吗?是否有很多表会有自己的搜索?您可以通过多种方式搜索项目吗?是否允许使用通配符进行搜索?
问题是您正在尝试使用真实数据库作为起点来创建临时内存数据库。并且不可能问某人创建数据库的最有效方法。为了能够回答您将需要更多信息。
如果您需要更快的速度,您还可以预序列化所有响应并将它们保存为字符串,以便您可以立即发送 json(或您现在将使用的格式)。问题是您需要的速度越快,代码就会变得越“丑陋”,并且您将为此付出内存消耗。
推荐阅读
- html - 可以使徽标图像具有响应性,但在 div 中不起作用
- powershell - 如何使用 Get-WmiObject 获取 Windows“已安装更新视图”的完整列表,因为它出现在控制面板中
- python - 我必须覆盖整数 __add__ 方法以支持整数和对象的加法吗?
- python - 重新绘制 2 个 pyplot 图表而不重新绘制新图表
- python - 如何使用 RSA 加密对超过 53 个字节的消息进行加密?
- bash - 如何从目录中创建的最新目录中复制文件?
- node.js - 为单个请求捕获多个路由
- docker - 在 docker 中运行 Localstack 时转发请求时出错
- php - 如何从同一个表中获取多个列
- laravel - How to orderBy Laravel Mutator value