Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通知用户SQL表更新的最佳方法?_Python_Mysql_Notifications - Fatal编程技术网

Python 通知用户SQL表更新的最佳方法?

Python 通知用户SQL表更新的最佳方法?,python,mysql,notifications,Python,Mysql,Notifications,我有一个桌面python应用程序,其数据后端是MySQL数据库,但其以前的数据库是网络访问的xml文件。当它支持xml时,我在应用程序启动时就产生了一个线程,该线程只需检查xml文件的更改,并且每当修改的日期更改时(由于任何用户更新该文件),应用程序就会刷新自身,以便多个用户可以在处理业务时使用并查看应用程序的更改 现在,该程序已经成熟,并且正朝着在线的方向发展,因此它可以在任何地方使用。Xml是不存在的,我使用MySQL和SQLAlchemy作为数据库访问方法。但是,由于信息不再存储在一个xm

我有一个桌面python应用程序,其数据后端是MySQL数据库,但其以前的数据库是网络访问的xml文件。当它支持xml时,我在应用程序启动时就产生了一个线程,该线程只需检查xml文件的更改,并且每当修改的日期更改时(由于任何用户更新该文件),应用程序就会刷新自身,以便多个用户可以在处理业务时使用并查看应用程序的更改

现在,该程序已经成熟,并且正朝着在线的方向发展,因此它可以在任何地方使用。Xml是不存在的,我使用MySQL和SQLAlchemy作为数据库访问方法。但是,由于信息不再存储在一个xml文件中,而是在SQL数据库中将其拆分为多个表,因此绘图会变厚。这使得某种“最后修改的”表值或结构的概念变得复杂。因此,问题是,您如何通知用户数据已更改,应用程序需要刷新?以下是我的一些想法:

  • 每个表都需要最后修改的列(这似乎是有史以来最糟糕的选项)
  • 一个单独的表,其中包含最后修改的列
  • 某种通过服务器的推送通知
  • 应该提到的是,我有能力在承载SQL db的同一台服务器上运行一个非常小的python脚本,应用程序可能可以连接到该服务器,并且(通过套接字?)它可以向所有连接的客户端传递信息
  • 一些额外信息:

    • 来回传递的信息将是相当低的带宽。大多数文本可能包含一些图像(很少超过50k)
    • 目前的客户数量非常少,只有几十家。但该项目可能会被一些更大的公司接手,客户数量可能会达到数百家。即使如此,带宽在可预见的未来也不会成为问题

    不管怎样,对我来说有点新领域,你会怎么做?提前谢谢

    据我所知,这不是一个客户机-服务器应用程序,而是一个具有公共远程存储的应用程序。
    一个想法是转向web服务(从长远来看,这将解决大多数问题)。
    另一个想法(如果您不想切换到web)是使用计时器定期刷新界面中的数据。
    另一种方法(也是更复杂的方法)是让服务器接收所有更新,将它们存储在数据库中,然后将更改推送到其他连接的客户端。
    您提到的前两个想法将涉及维护、可扩展性和设计丑陋问题。

    在我看来,最后两个更好,但我仍然坚持认为web服务是最好的。

    它有可能成为客户机-服务器应用程序,因为客户机之间可能存在通信,这需要通过服务器进行。我很犹豫是否每5秒左右就刷新一次,因为这似乎是不必要的数据加载。刷新也不需要包括更改的数据,因为要刷新的数据通常足够小,只需说“刷新”就可以了。看起来至少某种形式的web服务器交互将成为一种趋势……在我看来,web服务的伸缩性更好,维护也更容易。如果您想要一个更新了最新数据的交互界面,可以添加一些ajax。这完全取决于您的应用程序的功能。在某些情况下,它可能有一个web界面,但目前它只是一个桌面应用程序。您能否提供一些关于客户端数量、必须推送到每个客户端的数据量等方面的启示?最佳解决方案将取决于您系统的特性,更高带宽的应用需要更奇特的解决方案。使用一些额外信息更新OP。它主要是文本数据。此外,如果数据稍微过时,这真的很重要吗?您能容忍稍微陈旧的数据吗?或者这是一种用户体验否?可能是一种用户体验否,因为可能有多个用户在操作同一个表(想想任务)。我也在寻找一种谷歌文档的情况,你可以看到其他用户在哪里,甚至有时他们正在改变什么。(与“看他们打字”或其他类似的事情并不太像)。“非常轻微”的陈旧程度如何?一种解决方案可能是以与git相同的方式进行分散—拥有数据库的完整本地缓存,并在中央服务器上进行更新后立即推出更新。同步可能是一个问题,但如果您在服务器端执行所有应用程序逻辑,则可以防止执行任何无效操作。