Каков рекомендуемый способ получения общего числа сущностей того или иного вида, хранящихся в хранилище данных в dart?


Мы используем библиотеку gcloud dart для доступа к хранилищу данных. Мы хотели бы отобразить общее количество пользователей.

Конечно, самый простой способ сделать это:

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

Но это приведет ко всем пользователям.

Есть ли способ эффективно выполнить этот запрос с помощью библиотеки dart gcloud? Если нет, будет ли запрос для всех сущностей большой проблемой производительности и следует ли хранить общее число пользователей в отдельной сущности?

1 3

1 ответ:

Google Cloud Datastore предоставляет рядспециальных типов сущностей , которые используют зарезервированные имена __xxx__ и могут использоваться для запроса метаданных хранилища данных.

Используя этот механизм, можно, например, запросить все пространства имен с помощью __namespace__, запросить все виды с помощью __kind__. Пакет : gcloud содержит уже специальные виды и пространства имен для этой цели.

Любой другой вид метаданных может быть просто определен пользователем, среди прочего, для запрашивающий вид считается.

Вот фрагмент, который позволяет считать объекты в 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)';
}