建议在dart中获取存储在数据存储区中的实体总数的方法是什么?

时间:2017-05-23 15:52:00

标签: dart google-cloud-datastore

我们正在使用gcloud dart库来访问数据存储区。我们想显示用户总数。

当然,最简单的方法是:

db.query(User).run().length

但这会获取所有用户。

有没有办法使用dart gcloud库有效地运行此查询?如果没有,查询所有实体是一个很大的性能问题,我们应该将用户总数存储在一个单独的实体中吗?

1 个答案:

答案 0 :(得分:3)

Google Cloud Datastore提供了许多特殊实体种类,它们使用保留的__xxx__名称,可用于查询数据存储区元数据。

使用这种机制可以例如使用__namespace__查询所有名称空间,使用__kind__查询所有名称空间。 package:gcloud已包含用于此目的的特殊KindNamespace种类。

用户可以仅定义任何其他元数据类型,以查询种类计数。

这是一个允许人们在Dart中计算实体的片段:

import 'dart:async';

import 'package:appengine/appengine.dart';
import 'package:gcloud/db.dart';

Future main(List<String> args) async {
  await withAppEngineServices(() async {
    print(await getStats('Package'));
    print(await getStats('PackageVersion'));
  });
}

Future<Stats> getStats(String kind) async {
  final query = dbService.query(Stats)..filter('kind_name =', kind);
  final Stats stats = (await query.run().toList()).first;
  return stats;
}

@Kind(name: '__Stat_Kind__', idType: IdType.String)
class Stats extends ExpandoModel {
  @StringProperty(propertyName: 'kind_name')
  String kindName;

  @IntProperty()
  int count;

  String toString() => 'Stats(kind: "$kindName", count: $count)';
}