Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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/2/google-app-engine/4.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 应用程序引擎:几个大脚本还是很多小脚本?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 应用程序引擎:几个大脚本还是很多小脚本?

Python 应用程序引擎:几个大脚本还是很多小脚本?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我正在一个网站上工作,我想在AppEngine上托管。我的应用程序引擎脚本是用Python编写的。现在让我们假设你可以在我的网站上注册并拥有一个用户档案。现在,用户配置文件有点广泛,并且有50多个不同的ndb属性(只是为了举个例子) 如果用户想要编辑他的记录(他可以在一定程度上进行编辑),他可以通过我的网站向应用程序引擎后端发送请求 配置文件的方式是分区,通常大约有5到10个属性落入页面的一个小分区或容器中。在服务器端,我将有多个小脚本来处理编辑整个概要文件的小部分。例如,一个脚本将更新“地址信

我正在一个网站上工作,我想在AppEngine上托管。我的应用程序引擎脚本是用Python编写的。现在让我们假设你可以在我的网站上注册并拥有一个用户档案。现在,用户配置文件有点广泛,并且有50多个不同的ndb属性(只是为了举个例子)

如果用户想要编辑他的记录(他可以在一定程度上进行编辑),他可以通过我的网站向应用程序引擎后端发送请求

配置文件的方式是分区,通常大约有5到10个属性落入页面的一个小分区或容器中。在服务器端,我将有多个小脚本来处理编辑整个概要文件的小部分。例如,一个脚本将更新“地址信息”,另一个脚本将更新“兴趣”和“关于我”文本。这样我就得到了5个左右的脚本。优点是每个脚本都易于维护,并且只做一件特定的事情。但我不知道这样做是否明智。因为如果我在页面的其余部分保持这个习惯,我可能会得到大约100个或更多不同的.py脚本和一个非常大的app.yaml,我不知道它们在google服务器上的缓存效率有多高

So tl;博士:


在我的应用程序引擎后端执行小任务时使用许多小型后端脚本是一个好主意,还是应该使用一些脚本来处理一系列不同的任务?

这里有两个重要的注意事项

  • 从客户端到服务器的往返调用数
  • 一个更新用户配置文件的调用将比5个更新用户配置文件不同部分的调用执行得快得多,因为这样可以节省客户端和服务器之间以及服务器和数据存储之间的往返时间

  • 写成本
  • 如果您更新用户配置文件中的5个属性并保存它,然后更新5个其他属性并保存它,等等,那么您的写入成本将高得多,因为每次更新都会产生写入成本,包括对所有索引属性(即使是您未更改的属性)的更新


    与其创建一个包含50个属性的庞大用户配置文件,不如将很少更改的属性(姓名、性别、出生日期等)保留在一个实体中,并将其他属性分离到一个或多个不同的实体中。通过这种方式,您可以降低写入成本,但也可以减少有效负载(除非需要,否则无需来回移动所有50个属性),并简化应用程序逻辑(即,如果用户只更新地址,则无需更新整个用户配置文件)。

    这里有两个重要注意事项

  • 从客户端到服务器的往返调用数
  • 一个更新用户配置文件的调用将比5个更新用户配置文件不同部分的调用执行得快得多,因为这样可以节省客户端和服务器之间以及服务器和数据存储之间的往返时间

  • 写入成本
  • 如果您更新用户配置文件中的5个属性并保存它,然后更新5个其他属性并保存它,等等,那么您的写入成本将高得多,因为每次更新都会产生写入成本,包括对所有索引属性(即使是您未更改的属性)的更新


    与其创建一个包含50个属性的庞大用户配置文件,不如将很少更改的属性(姓名、性别、出生日期等)保留在一个实体中,并将其他属性分离到一个或多个不同的实体中。通过这种方式,您可以降低写入成本,但也可以减少负载(除非需要,否则无需来回移动所有50个属性),并简化应用程序逻辑(即,如果用户只更新地址,则无需更新整个用户配置文件).

    每次启动应用程序实例时,都必须加载一个大脚本,这可能会影响实例启动时间、启动实例的每个请求的响应时间以及实例的内存占用。但是它可以立即处理任何请求,不需要加载额外的代码

    在应用程序启动后,可以根据需要延迟加载多个较小的脚本,这些脚本的优点可能会吸引一些应用程序:

    • 主应用程序/模块脚本可以保持较小,从而缩短实例启动时间
    • 应用程序的内存占用可以保持较小,延迟加载文件中的处理程序代码直到有对此类处理程序的请求时才会加载,这对于很少使用的处理程序来说很有趣
    • 对于需要加载处理程序代码的请求,额外的响应时间延迟较小,因为只需要加载一个较小的脚本
    当然,缺点是,由于加载处理程序脚本,某些请求的延迟会比通常情况下更长:在最坏的情况下,受影响的请求数是每个实例生存期的脚本数

    更新用户配置文件不是经常做的事情,我认为它是一个很少使用的功能,因此将它的处理程序放在一个单独的文件中看起来很吸引人。将其拆分为每个文件一个处理程序-我发现这可能有点极端。这真的取决于你,你更了解你的应用程序和你的风格


    从GAE(缓存)infra的角度来看,文件配额是10000个文件,我不会太担心只有约100个文件。

    每次应用程序实例启动时,都必须加载一个大脚本,可能会影响实例启动时间,启动实例的每个请求的响应时间以及实例的内存占用。但是它可以立即处理任何请求,不需要加载额外的代码

    在应用程序启动后,可以根据需要延迟加载多个较小的脚本,这些脚本的优点可能会吸引一些应用程序:

    • 主应用程序/模块脚本可以保持较小,从而缩短实例启动时间
    • 应用程序的内存占用可以保持不变