使用Python获取数据库的大小

使用Python获取数据库的大小,python,rethinkdb,Python,Rethinkdb,如何使用Python获得给定数据库的大小?我之所以这样做,是因为我正在开发一个多用户图形前端来重新思考数据库,并希望能够为每个用户的数据库强制执行配额 下面的内容将非常棒: r.db('thedatabase').size().run() 50gb RejectionDB没有用于此类操作的内置命令 最简单的解决方案可能是在自己的(有限的)分区上启动多个RequiredDB实例(使用Docker可能会使这里的操作更简单)。RequiredDB没有用于此类操作的内置命令 最简单的解决方案可能是在自

如何使用Python获得给定数据库的大小?我之所以这样做,是因为我正在开发一个多用户图形前端来重新思考数据库,并希望能够为每个用户的数据库强制执行配额

下面的内容将非常棒:

r.db('thedatabase').size().run()
50gb

RejectionDB没有用于此类操作的内置命令


最简单的解决方案可能是在自己的(有限的)分区上启动多个RequiredDB实例(使用Docker可能会使这里的操作更简单)。

RequiredDB没有用于此类操作的内置命令


最简单的解决方案可能是在自己的(有限的)分区上启动多个RejectionDB实例(使用Docker可能会使这里的事情变得更简单)。

我知道这是一个迟来的答案,没有你要求的那么漂亮,但是为了将来寻找此功能的人,请将其放在这里:

实现这一点的一种方法是访问RejectionDB虚拟数据库
RejectionDB
。里面有一个stats表,其中包含大量关于数据库使用情况的信息

r.db('rethinkdb')
    .table('stats')
    .filter(
        r.row('id').contains('table_server')
    )('storage_engine')('disk')('space_usage')('data_bytes')
    .reduce((left, right) => left.add(right))
此查询将检索所有节点上所有数据库中所有表的大小。本质上,它只是从stat对象中读取每个表的用法并将其相加

请注意,这将获得切分设置中所有节点的组合使用(我认为)

按服务器筛选: 基本上与第一个相同,只是以

按数据库筛选: 与上面相同,只使用db

r.db('rethinkdb')
    .table('stats')
    .filter(r.and(
        r.row('id').contains('table_server'),
        r.row('db').eq('dbname'),
        r.row('table').eq('tablename')
    )
    )('storage_engine')('disk')('space_usage')('data_bytes')
按表名过滤几乎是一样的。请记住,如果要针对数据库中的特定表,则还应确保为数据库添加筛选器。否则,具有相同名称的两个表将返回两个大小值。还要注意,我们只期望一个结果,因此不需要减少

最后,请记住它们只是ReQL查询

还要注意,这使用了JavaScript箭头(
=>
)函数。在Python中,您可以将其替换为
.reduce(lambda left,right:left+right)


如果您有任何改进,请发表评论:)

我知道这是一个迟来的答案,没有您要求的那么漂亮,但请将此内容放在这里,以供将来寻找此功能的人使用:

实现这一点的一种方法是访问RejectionDB虚拟数据库
RejectionDB
。里面有一个stats表,其中包含大量关于数据库使用情况的信息

r.db('rethinkdb')
    .table('stats')
    .filter(
        r.row('id').contains('table_server')
    )('storage_engine')('disk')('space_usage')('data_bytes')
    .reduce((left, right) => left.add(right))
此查询将检索所有节点上所有数据库中所有表的大小。本质上,它只是从stat对象中读取每个表的用法并将其相加

请注意,这将获得切分设置中所有节点的组合使用(我认为)

按服务器筛选: 基本上与第一个相同,只是以

按数据库筛选: 与上面相同,只使用db

r.db('rethinkdb')
    .table('stats')
    .filter(r.and(
        r.row('id').contains('table_server'),
        r.row('db').eq('dbname'),
        r.row('table').eq('tablename')
    )
    )('storage_engine')('disk')('space_usage')('data_bytes')
按表名过滤几乎是一样的。请记住,如果要针对数据库中的特定表,则还应确保为数据库添加筛选器。否则,具有相同名称的两个表将返回两个大小值。还要注意,我们只期望一个结果,因此不需要减少

最后,请记住它们只是ReQL查询

还要注意,这使用了JavaScript箭头(
=>
)函数。在Python中,您可以将其替换为
.reduce(lambda left,right:left+right)

如果您有任何改进,请发表评论:)