Каков рекомендуемый способ получения общего числа сущностей того или иного вида, хранящихся в хранилище данных в dart?
Мы используем библиотеку gcloud
dart для доступа к хранилищу данных. Мы хотели бы отобразить общее количество пользователей.
Конечно, самый простой способ сделать это:
db.query(User).run().length
Но это приведет ко всем пользователям.
Есть ли способ эффективно выполнить этот запрос с помощью библиотеки dart gcloud? Если нет, будет ли запрос для всех сущностей большой проблемой производительности и следует ли хранить общее число пользователей в отдельной сущности?
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)'; }