预定的长 运行 用户查询

Scheduled, long running user queries

我需要社区的一些建议来满足我的要求。以下是要求,我需要一些方法建议。

客户端的用户需要从我的源数据库中检索数据(比如我的生产服务器中的 SQL 数据库)。用户通过中间服务层(WCF Rest 服务)访问数据。在另一台服务器(信息服务器)上,我有一个 SQL 数据库(信息数据库),它将保存所有可以请求的查询。由于在某些情况下我的数据很大,我会为用户提供安排数据检索并稍后查看数据的选项。每个用户的日程安排信息也将存储在信息数据库中。我还允许用户根据需要实时检索数据。

在这两种情况下,我都想从源(生产数据库)查询数据,以文件格式(可能是 CSV 或 excel)存储它们,然后当用户需要数据时,我会将数据发送到客户。

因为查询存储在 InfoDB 中。我让管理员为每个查询定义时间表 运行 时间。这是为了让管理员能够在夜间对服务器的调用较少时调整长 运行ning 查询 运行。如果用户要求实时查询 运行,我会允许。

作为解决方案架构,我想到了这个:

  1. 我将在 Info Server 上安装一个 WCF 休息服务。该服务将充当用户的调用点。当用户实时调用查询时,该服务将获取结果,保存为文件格式并将其传输过来。如果用户计划查询,该服务将在信息数据库中为用户/查询添加一个条目。
  2. 我将在信息服务器上提供 Windows 服务。此 Windows 服务将定期检查信息数据库中的计划查询条目,如果查询在计划时间内,它将开始 运行 查询,获取数据并将其保存到文件位置,然后将文件位置条目添加到计划条目。这将使我能够跟踪哪些计划已完成以及数据可用的位置(文件路径)。

下面是我的问题:

  1. 我的数据可能很大,WCF 休息服务是否足以通过网络传输大文件?我可以通过网络传输文件还是需要以 JSON 的形式传输数据?什么是最好的方法。
  2. 如果我使用 windows 服务,这是一个好的方法还是有更好的选择?我问的原因是因为根据我的理解 Windows 服务必须总是 运行,因为我需要弄清楚计划的条目。这意味着 Windows 服务会在特定的时间间隔检查信息数据库并查看计划条目是否应为 运行。在理想情况下,windows 服务将 运行 全天候定期检查数据库,无需太多操作,因为最好所有计划都在夜间进行。
  3. 我使用了一种中介服务方式,因为如果我明天需要迁移到云端,我可以很容易地迁移这个解决方案。我的假设是否正确?
  4. 如果我明天搬到云端,我会不会对数据传输进行加密(可能是数据加密或文件加密)。我对数据一无所知 encryption/decryption.

需要您对此提出建议。

My data can be huge, will a WCF rest service be good enough to transfer large files over the wire ? Can I transfer files over wire or I need to transfer data as JSON ? What is the best approach.

当你说巨大时,有多大?我们是在谈论千兆字节、兆字节还是千字节。我经常有 100mb 的休息响应(你可能需要调整一些东西,增加你的 MaxMessageLength,但 this 应该足以让你继续。我会听取他们的建议并使用流媒体 API ,尤其是当您正在谈论几兆内容时。

If I use a windows service, is this a good approach or is there a better alternative ? The reason I am asking is because as per my understanding Windows Service will have to run always , because I need to figure out the entries which are scheduled. This means at specific interval the Windows Service would check the info database and see if the schedule entry should be run or not. In ideal scenario the windows service will run through out the day and check the database periodically without much action because preferably all schedules would be at night time.

注意编写自己的调度程序。您最好将事物放到队列中进行处理,然后在适当的时间启动工作人员。这样你就可以直接调用工作人员进行实时调用。另外,只要数据库空闲,您就可以 运行 它,而不是按计划进行。当服务空闲时,这很棘手 "knowing"。尤其是在全天候用户的世界里。

I have used an intermediary service approach because if I need to move to cloud tomorrow, I can easily move this solution. Am I right in my assumption ?

是的,将端点包装在休息服务 (WCF) 中将使迁移到云变得更加容易。

If I move to cloud tomorrow, would I be bale to encrypt the data transfer (may be data encryption or file encryption). I have no idea on data encryption/decryption.

HTTPS 是您的朋友。阅读 this。不要在这里发明你自己的,或使用专有加密。 HTTPS 是古老的、直接的和好的。