我正在寻找的是这个SQL翻译成Google AppEngine(for Java)术语:
select count(*) from Customers
Run Code Online (Sandbox Code Playgroud)
看起来很简单,但是从阅读文档来看,我似乎必须运行一个匹配所有客户的查询,然后循环并计算结果,将分页考虑在内.我不想检索每一个元素,我只想数数.
或者换句话说,有一个API循环遍历给定类型的所有条目(目前无法找到确切的API).这似乎是非常低效的,更不用说数据存储调用也带有有限的配额.
任何提示将不胜感激.
谢谢,马克
正如wooble所说,bigtable不支持行计数作为一个基本概念 - 你可以编写一个包装函数,正如mcotton所说,但是,正如他从文档中引用的那样,最多仍然会限制为1000.
为了克服这些限制,您需要为每个要计数的实体保留一个计数器,该计数器在每次放入该类型的新实体时递增,在删除该类实体时递减.
为了保持您的应用程序具有高度可扩展性,您可能希望对此类计数器进行分片,请参阅http://code.google.com/appengine/articles/sharding_counters.html(遗憾的是我不知道该配方已转换为Java,但概念应该是相同的).
不幸的是,如果不运行查询来匹配所有实体,BigTable 就不可能对实体进行计数。请记住,当您的结果超过 1000 个时,像 Google 搜索和 Google Reader 这样的应用程序甚至不会为您提供准确的结果计数,如果您绝对、肯定地认为您需要对所有实体进行计数,您可以执行一系列操作keys_only 查询仅限于 1000 个实体,并将所有实体的计数相加。
| 归档时间: |
|
| 查看次数: |
1312 次 |
| 最近记录: |