Python 提高提取时间和此功能';s的表现

Python 提高提取时间和此功能';s的表现,python,performance,google-app-engine,Python,Performance,Google App Engine,我正在搜索Final模型(定义如下),并使用一个查询对其name属性进行过滤。在开发服务器上执行此查询大约需要2200ms。我怎样才能加快速度?这是一个例子 我也在created字段上进行过滤,但这需要超过10000毫秒,所以我现在已经删除了查询的这一部分 class Final(db.Model): name = db.StringProperty() # 7 characters long author = db.StringProperty() rating

我正在搜索
Final
模型(定义如下),并使用一个查询对其
name
属性进行过滤。在开发服务器上执行此查询大约需要2200ms。我怎样才能加快速度?这是一个例子

我也在
created
字段上进行过滤,但这需要超过10000毫秒,所以我现在已经删除了查询的这一部分

class Final(db.Model):
    name = db.StringProperty()     # 7 characters long
    author = db.StringProperty()
    rating = db.FloatProperty()
    created = db.DateTimeProperty()

# this is the important part of the request (AppStats shows that these two
# queries take about 2200ms each).

 query = Final.all()
 query2 = Final.all()
 query.filter('name = ', link1)
 query2.filter('name = ', link2)
 aa = query.fetch(10000)
 bb = query2.fetch(10000)

有几种方法可以加快此查询的速度:

  • 对开发服务器使用(可能更快)

  • 对于
    name
    ,是否可以存储整数ID而不是字符串ID?这可能会使实体变小,从而减少传输和反序列化它们所需的时间。检查整数相等比检查字符串相等更容易,因此数据存储执行的筛选操作可能更快

  • 如果
    name
    很大,您可以通过将作者姓名和评级移动到单独的子模型中来节省一些时间。然后,您可以使用祖先查询来获取相关的子模型——这样,您只需获取所需的字段,就可以节省传输和反序列化时间


  • 有几种方法可以加快此查询的速度:

  • 对开发服务器使用(可能更快)

  • 对于
    name
    ,是否可以存储整数ID而不是字符串ID?这可能会使实体变小,从而减少传输和反序列化它们所需的时间。检查整数相等比检查字符串相等更容易,因此数据存储执行的筛选操作可能更快

  • 如果
    name
    很大,您可以通过将作者姓名和评级移动到单独的子模型中来节省一些时间。然后,您可以使用祖先查询来获取相关的子模型——这样,您只需获取所需的字段,就可以节省传输和反序列化时间


  • 虽然David的建议是好的,但在开发服务器上优化速度可能是个坏主意。开发服务器的性能不能反映生产服务器的性能,基于开发服务器运行时的优化可能在生产中效果不佳


    一般来说,您可以假设开发服务器的性能会随着记录的添加而降低,而在生产环境中则绝对不是这样,因为您的查询运行时只取决于结果集的大小。如果您可以在生产环境中减小示例数据集的大小,这可能是加快开发速度的最佳选择。

    虽然David的建议很好,但在开发服务器上优化速度可能是个坏主意。开发服务器的性能不能反映生产服务器的性能,基于开发服务器运行时的优化可能在生产中效果不佳



    一般来说,您可以假设开发服务器的性能会随着记录的添加而降低,而在生产环境中则绝对不是这样,因为您的查询运行时只取决于结果集的大小。如果您可以在生产中减少样本数据集的大小,这可能是加快开发的最佳选择。

    您能更清楚地说明您的问题吗?有什么不清楚?对于我正在做的两个fetch调用,是否有提高速度或更好的方法?aa,谢谢。看起来您正在开发服务器上运行这个。此查询在生产服务器上如何执行?您实际获取了多少个实体?您的查询要求10k个实体,但我怀疑您只是试图获取“所有”实体,实际检索的实体数量有所减少。avg上的条目数量将达到数百个,其中一些条目将接近10k,因为此程序基本上收集给定名称(因此过滤器)的所有最终实例作为输入,并获得收视率。您所说的生产服务器到底是什么意思?上传到google apps服务器,或者仅从CMD上传到appengine_控制台,您可以更清楚地说明您的问题吗?什么不清楚?对于我正在做的两个fetch调用,是否有提高速度或更好的方法?aa,谢谢。看起来您正在开发服务器上运行这个。此查询在生产服务器上如何执行?您实际获取了多少个实体?您的查询要求10k个实体,但我怀疑您只是试图获取“所有”实体,实际检索的实体数量有所减少。avg上的条目数量将达到数百个,其中一些条目将接近10k,因为此程序基本上收集给定名称(因此过滤器)的所有最终实例作为输入,并获得收视率。您所说的生产服务器到底是什么意思?从CMDHMM上传到google apps server,或者仅仅是appengine_控制台,我的名字是形式为/s/s_/s/s/s/s的唯一标识符字符串,我认为整数不会有太大的改进。我的另一个想法是,当我填充表Final时,对于一个给定的名称,使用该名称和包含该名称的实例字典创建另一个表,然后我可以在表中调用该名称,获取键并将该调用放置到最终的表中。这表明过滤器是我最大的延时?woops yes/s string char,例如t3_cpv6hSo
    name
    字段当时非常小。你试过使用sqlite后端了吗?嗯,不,我刚开始查看页面,是的,30个同名实例需要2秒钟,对于一个200个实例,每个实例都有相同的名称,大约需要2秒。hmmm我的名称是形式为/s/s_u2;/s/s/s/s的唯一标识符字符串。我不认为使用整数会有多大的改进。我的另一个想法是,当我填充表Final时,为一个给定的名称创建另一个表,并使用该表的名称和字典