我们正在设计一个系统,一次需要数千行,并通过JSON将它们发送到构建在Google App Engine上的REST API。通常是3-300KB的数据,但在极端情况下可以说几MB。
然后,REST API应用程序将此数据调整到服务器上的模型,并将它们保存到数据存储区。我们是否可能(最终如果不是立即)遇到谷歌应用引擎的任何性能瓶颈,无论是使用多个模型还是一次将数据行保存到数据存储区?
客户端执行GET以获取数千条记录,然后执行包含数千条记录的PUT。是否有任何理由需要超过几秒钟,并且需要一个任务队列API?
答案 0 :(得分:2)
App Engine中唯一的瓶颈(除了单个实体组限制)是您可以在单个实例上的单个线程中处理多少个实体。此数字取决于您的使用案例和代码质量。达到限制后,您可以(a)使用功能更强大的实例,(b)使用多线程和/或(c)添加更多实例,将处理能力扩展到您想要的任何级别。
Task API是一个非常有用的大数据加载工具。它允许您将作业拆分为大量较小的任务,设置所需的处理速率,并让App Engine自动调整实例数以满足该速率。另一种选择是MapReduce API。
答案 1 :(得分:1)
这是一个非常好的问题,我在采访中被问过,在很多不同的情况下也会出现。您的系统主要包含两件事:
根据我对这个问题的经验,当你以不同的方式看待这两件事时,你能够为两者提出可靠的解决方案。我通常使用缓存,例如memcachd,以便保持数据易于阅读。同时,为了写作,我尝试使用主数据库和一些从属实例。所有写入都将转到从属实例(从而不会锁定主数据库以获取同步到高速缓存的读取),并且对从属数据库的写入可以通过循环方式分发,确保您的插入语句不会被任何具有高出现率的模型属性所倾斜。