我有三个相同结构的模型(每个字符串属性存储~20个字符):
class A(ndb.Model):
_use_cache = False
_use_memcache = False
p1 = ndb.KeyProperty(indexed=False)
p2 = ndb.IntegerProperty(default=0)
p3 = ndb.IntegerProperty(default=6)
p4 = ndb.StringProperty(indexed=True)
p5 = ndb.StringProperty(indexed=True)
p6 = ndb.StringProperty(indexed=True)
p7 = ndb.StringProperty(indexed=True)
p8 = ndb.StringProperty(indexed=True)
我想创建200,000个实体来大规模测试性能
我计划在我的应用的多次运行中提供数据(我从应用启动器停止了我的应用并再次启动它)。我决定使用这种方法,因为我注意到即使在放入所有数据之后,内存(如我的任务管理器中所示)也没有降低。它实际上随着数据的设置逐渐增加10000.但是,在停止应用程序时,内存会被释放。我怀疑内存泄漏问题但不确定
我给了一个for循环,实体总数为17550.我为1000个实体的集合提供了ndb.put_multi()。我按计数获得了7051个实体(A.query()。count())
接下来,我尝试通过相同的方法添加12870个实体(以1000组为单位)。 但我得到了7109的计数
我的电脑是带有8 GB RAM的Lenovo T430(Windows 7企业版);所以资源不应该是一个问题,除了应用程序引擎启动器和chrome之外我不会运行任何其他东西..我正在使用1.9.1版本的gae python sdk ..
是否有其他人面临类似的开发服务器实体扩展问题..您能够实现的最大值是什么..
关注:
虽然GAE文档说查询(过滤条件),但fetch_page(count)响应时间仅取决于获取的匹配实体的总大小,但我看到响应时间降低时总数(匹配和不匹配)实体数量增加使得取得的数量相同..
答案 0 :(得分:2)
甚至不想在开发服务器上尝试这样做。
就您在开发服务器上的体验而言,它无意义,无论如何都无法与生产运行方式进行比较。唯一的值(假设您可以在可以处理的时间范围内存储所有200,000条记录)是应用程序按预期运行。
其次,执行query.count()
不会立即在dev服务器或生产中提供预期的结果,因为您将遇到最终一致性的影响。