代码之家  ›  专栏  ›  技术社区  ›  kovshenin

AppEngine:将大量对象保存到数据存储时出错

  •  2
  • kovshenin  · 技术社区  · 14 年前

    干杯。我运行的是Ubuntu10.04和最新的google appengine sdk。我正在一个简单的网站上工作,这个网站有帖子和评论。我基本上实现了一个简单的树,用 parent_comment , left right 价值观。

    我创建了一个在新的( not is_saved() 评论是 put() 进入google数据存储,计算 左边 正确的 新注释的值,以及更新有效层次结构的旧注释。我基本上跟着 Managing Hierarchical Data in MySQL 并在python中实现。

    一切似乎都很好,添加了新的注释,线程看起来不错,但是…
    在启动工作期间提交40条注释的循环,但当我将该循环增加到80条或更多时,会留下一个ioerror:

    IOError: [Errno 24] Too many open files: '/tmp/tmp0agXqU'
    

    生成60条评论的代码如下:

    for k in range(0, 4):
        comments = {0: None}
        for i in range(1, 21):
            j = random.randrange(0, len(comments))
            pc = comments[j]
    
            comments[i] = Comment(
                name=lipsum(count=1),
                email=lipsum(count=1, make_slug=True) + '@email.com',
                url='http://' + lipsum(count=2, make_slug=True) + '.com',
                content=lipsum(count=random.randrange(10, 50)),
                object_link=p.key(),
                parent_comment=pc
            )
            comments[i].put()
    

    这个 lipsum 函数只返回一段lorem ipsum文本。

    有什么解决办法吗?谢谢!

    2 回复  |  直到 13 年前
        1
  •  2
  •   systempuntoout    14 年前

    对于一个庞大的排队工作的人来说,我也有同样的问题。

    切换到 SQLite 对于本地数据存储,可以解决以下问题:

    dev_appserver.py --use_sqlite 
    

    自从应用引擎sdk 1.3.3以来,python SDK有一个新的实验特性 它提供了使用sqlite的选项 作为数据存储存根后端。使用 dev-appserver中的sqlite应该 提高本地的性能 大型测试时的数据存储 数据集。

    对于 dev_appserver 文档,看一下 here

        2
  •  1
  •   stefanw    14 年前

    这很可能是由于 bug in latest App Engine SDK . 错误报告的注释提供了修复问题的补丁。