小编Bar*_*man的帖子

在新的Gmail API中批量处理电子邮件

我正在使用Google新发布的Gmail API的python版本.

以下调用仅返回消息ID列表:

service.users().messages().list(userId = 'me').execute()
Run Code Online (Sandbox Code Playgroud)

但后来我只有一个消息ID列表,需要迭代它们并逐个获取它们.

有没有办法在单个调用中获取id列表的整个消息内容?(类似于在Google Calendar API中完成的操作)?

如果还不支持,Google会考虑在API中添加这些内容吗?

更新

这是适合我的解决方案:
batch = BatchHttpRequest() for msg_id in message_ids: batch.add(service.users().messages().get(userId = 'me', id = msg_id['id']), callback = mycallbackfunc) batch.execute()

python google-api gmail-api

24
推荐指数
2
解决办法
4462
查看次数

与原生pymongo使用相比,Mongoengine在大型文档上的速度非常慢

我有以下mongoengine型号:

class MyModel(Document):
    date        = DateTimeField(required = True)
    data_dict_1 = DictField(required = False)
    data_dict_2 = DictField(required = True)
Run Code Online (Sandbox Code Playgroud)

在某些情况下,DB中的文档可能非常大(大约5-10MB),而data_dict字段包含复杂的嵌套文档(dicts列表的字典等等).

我遇到过两个(可能是相关的)问题:

  1. 当我运行本机pymongo find_one()查询时,它会在一秒钟内返回.当我运行MyModel.objects.first()时需要5-10秒.
  2. 当我从数据库查询单个大型文档,然后访问其字段时,只需执行以下操作需要10-20秒:

    m = MyModel.objects.first()
    val = m.data_dict_1.get(some_key)
    
    Run Code Online (Sandbox Code Playgroud)

对象中的数据不包含对任何其他对象的任何引用,因此它不是取消引用的对象的问题.
我怀疑它与mongoengine的内部数据表示的某些低效率有关,这会影响文档对象的构造以及字段访问.我能做些什么来改善这个吗?

python mongodb pymongo mongoengine

12
推荐指数
1
解决办法
3248
查看次数

MongoDB - 慢'$ group'表现

我有一个超过1,000,000条记录的MongoDB集合.每个记录大小约为20K(因此总集合大小约为20GB).

我在集合中有一个'type'字段(可以有大约10个不同的值).我想获得该系列的per-type计数器.此外,'type'字段有一个索引.

我测试了两种不同的方法(假设python语法):

一种天真的方法 - 使用'count'调用每个值:

for type_val in my_db.my_colc.distinct('type'):
    counters[type_val] = my_db.my_colc.find({'type' : type_val}).count()
Run Code Online (Sandbox Code Playgroud)

使用具有'$ group'语法的聚合框架:

counters = my_db.my_colc.aggregate([{'$group' :  {'_id': '$type', 'agg_val': { '$sum': 1 } }}])
Run Code Online (Sandbox Code Playgroud)

我收到的第一种方法的性能比第二种方法快2个数量级.似乎与count只在索引上运行而不访问文档这一事实有关,而$ group必须逐个遍历文档.(大约1分钟对45分钟).

有没有办法在'type'索引上运行有效的分组查询,只使用索引,从而实现#1的性能结果,但是使用聚合框架?

我正在使用MongoDB 2.6.1

更新:https: //jira.mongodb.org/browse/SERVER-11447在MongoDB Jira中就此问题开放.

performance mongodb pymongo

10
推荐指数
1
解决办法
6394
查看次数

MongoDB 3.0在副本模式下对oplog集合进行写锁定

在副本模式下,对任何DB中的任何集合的每个写操作也会写入oplog集合.

现在,当并行写入多个DB时,所有这些写操作也会写入oplog.我的问题:这些写操作是否需要锁定oplog?(我正在使用w:1写关注).如果他们这样做,这有点类似于对所有不同DB的所有写操作之间的全局锁定,不是吗?

我很乐意得到任何暗示.

replication mongodb replicaset wiredtiger

8
推荐指数
1
解决办法
990
查看次数

Google App Engine - 查询包含值的数组

我有一个GAE数据存储表,其中包含一个数组字段(包含几个字符串).我想基于包含特定字符串的所有数组字段来过滤此表.我怎样才能做到这一点 ?我没有在GQL中看到'包含'运算符,而'in'运算符则以相反的方式运行.我只需要遍历所有实体并自己进行检查吗?

(PS我在GAE工作中使用Python).

google-app-engine gql gqlquery google-cloud-datastore

6
推荐指数
1
解决办法
1458
查看次数

使用 $where 与嵌套字段进行比较

我有一个 mongodb 集合,其中包含以下结构的文档(简化它,数字只是示例):

{'a' : 1, 'b' : {'c':2}}

我想运行以下 mongodb 查询:

{'$where' : 'this.a < this.b.c'}

以上是行不通的。这种查询的正确语法是什么?

mongodb pymongo mongodb-query

5
推荐指数
1
解决办法
672
查看次数

WiredTiger - 在重新同步辅助副本集成员期间"太多打开文件错误"

我正在将辅助副本集成员升级到wiredTiger.我已将它从MongoDB 2.6.3升级到3.0.4并将存储引擎更改为wiredTiger.现在它正在重新同步主数据库中的所有数据.在某些时候收到以下错误,并且该过程重新开始:

2015-07-22T13:18:55.658 + 0000 I INDEX [rsSync]使用批量方法构建索引

2015-07-22T13:18:55.664 + 0000我完成了INDEX [rsSync]构建索引.共扫描了1591条记录.0秒

2015-07-22T13:18:56.397 + 0000 E STORAGE [rsSync] WiredTiger(24)[1437571136:397083] [20413:0x7f3d9ed29700],file:WiredTiger.wt,session.create:WiredTiger.turtle:fopen:打开太多档

2015-07-22T13:18:56.463 + 0000 E REPL [rsSync] 8 24:打开文件太多

2015-07-22T13:18:56.463 + 0000 E REPL [rsSync]初始同步尝试失败,剩余9次尝试

同一台机器之前运行的是2.6.3版本,没有任何打开文件限制问题.我知道wiredTiger可能会创建更多的文件,所以它必须是它,但它是否会同时打开它们?

以供参考:

cat/proc/sys/fs/file-max

10747371

在/etc/init.d/mongod中配置为:

ulimit -n 64000

根据文档,似乎mongo为每个数据文件保存文件描述符.与在wiredTiger中一样,这导致每个集合的文件+每个索引的文件,根据我们的用例计算,可以加起来超过700K.

所以我可以将ulimit更改为700000或更高,但我想知道这是否是最正确的解决方案,以及存在哪些替代方案.

mongodb wiredtiger

5
推荐指数
1
解决办法
2708
查看次数

使用C#Driver以名称打开MongoDB GridFS

在pymongo中,可以选择打开具有特定集合名称的GridFS.例如mygridfs = gridfs.GridFS(db, collection = mycolc).

我在MongoDB C#驱动程序(官方MongoDB最新驱动程序版本)中找不到类似的选项.

因此,如果我想在Python和C#模块之间共享GridFS数据,我只能使用DB中的默认GridFS(名为"fs").

是否可以在C#MongoDB驱动程序中以某种方式访问​​具有非默认名称的GridFS的任何线索?

c# python mongodb pymongo mongodb-.net-driver

4
推荐指数
1
解决办法
399
查看次数