小编Dan*_*ath的帖子

Google App Engine - 查询包含值的数组

我有一个GAE数据存储表,其中包含一个数组字段(包含几个字符串).我想基于包含特定字符串的所有数组字段来过滤此表.我怎样才能做到这一点 ?我没有在GQL中看到'包含'运算符,而'in'运算符则以相反的方式运行.我只需要遍历所有实体并自己进行检查吗?

(PS我在GAE工作中使用Python).

google-app-engine gql gqlquery google-cloud-datastore

6
推荐指数
1
解决办法
1458
查看次数

Google App引擎数据存储区实际应用示例

问题

经过几天的阅读应用程序引擎和数据存储的文档后,我似乎无法理解如何构建一个真实的可伸缩应用程序.

我也找不到最佳实践的好例子.确定我可以使我的应用程序工作,但我不知道是否有利于扩展到我的开发环境可以提供的负载以上.

它清楚地说明了使用数据存储区的应用程序引擎教程:"但是,您可以写入同一实体组的速率限制为每秒写入实体组一次.当您设计一个真实的应用程序时,你'我需要记住这个事实."

假设

假设我理解的内容(请纠正我,如果我错了),假设数据存储根是/ then/Users/*(Keys)是实体组而/ Products/Beauty/*是受实体组影响的实体组之前的限制为每秒1次写入.(是/产品/美容/*受限于/ Products/*以及?)

我错过了解这个吗?

例

让我们假设我们想要构建一个真实的聊天应用程序或购物应用程序.这些应用程序必须存储用户将在应用程序上执行的许多操作的数据.比如发送消息或评论产品或删除/添加/编辑产品.

鉴于这些操作,数据存储应该如何?当然,我们无法将消息存储为/ Messages/{Message,To,From,Timestamp},因为许多用户将发送必须写入此密钥的消息.另一种方法是每秒限制用户每1条消息并将其存储在他的配置文件/ Users/{USER}/{Message,To,From,Timestamp}中,但只有一个用户可以写入该实体组.所以我们可以把它们放在根目录上:/ {USER}/{Message,To,From,Timestamp}但是它被认为是一个好习惯吗?是否足够快速查询数据存储区以获取用户之间的所有消息?(有效吗?可能吗?)

另一种方法是将所有内容存储在数据存储区的根目录中,作为"消息"和"用户","产品"和"类别"(例如,产品中将包含类别引用).

摘要

  1. 我在哪里可以找到对数百万用户有利的代码示例或设计手册?
  2. 我错了什么吗?
  3. 有关该主题的任何建议吗?

我找到了这些代码示例,但我没有工具或想法如何知道这些是否是规模的任何良好实践?

谢谢!

google-app-engine google-cloud-datastore

6
推荐指数
2
解决办法
1822
查看次数

Android studio App引擎数据存储集成 - NoSuchMethodError

我已经使用Google端点创建了一个方法并将其公开.我想要的只是从Google DataStore保存和检索数据.

当我尝试使用API​​ Explorer进行测试时,出现以下错误 -

java.lang.NoSuchMethodError

我已附上以下代码

 @ApiMethod (name ="mTest")
    public void mTest(@com.google.api.server.spi.config.Named("UName") String UName) throws IOException {

        DatastoreService datastoreService;
        datastoreService = DatastoreServiceFactory.getDatastoreService();
        Transaction tx=datastoreService.beginTransaction();
        try {
            Key userKey = KeyFactory.createKey("USERS_PK", UName);
            Entity userEntity=new Entity("M_USERS",userKey);
            userEntity.setProperty("TestColumn","TestColumnValue");
            datastoreService.put(userEntity);
            tx.commit();
        }finally {
            if (tx.isActive()){
                tx.rollback();
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

在datastoreService.put(userEntity)上遇到错误 ;

请在下面找到堆栈跟踪:

Jun 29, 2014 5:12:20 PM com.google.api.server.spi.SystemService invokeServiceMethod
INFO: cause={0}

java.lang.NoSuchMethodError: com.google.appengine.api.datastore.Key.getAppIdNamespace()Lcom/google/appengine/api/datastore/AppIdNamespace;
    at com.google.appengine.api.datastore.KeyTranslator.convertToPb(KeyTranslator.java:49)
    at com.google.appengine.api.datastore.EntityTranslator.convertToPb(EntityTranslator.java:50)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:203)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:180)
    at com.google.appengine.api.datastore.Batcher$BatchIterator.<init>(Batcher.java:177)
    at com.google.appengine.api.datastore.Batcher$2.<init>(Batcher.java:312)
    at com.google.appengine.api.datastore.Batcher.getBatches(Batcher.java:312)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.doBatchPut(AsyncDatastoreServiceImpl.java:536) …
Run Code Online (Sandbox Code Playgroud)

google-app-engine android google-cloud-datastore android-studio

6
推荐指数
1
解决办法
1141
查看次数

App Engine数据存储区查询是否具有默认排序顺序?

App Engine数据存储区查询的返回值是否有默认排序顺序?如果是这样的话是什么?

google-app-engine google-cloud-datastore

6
推荐指数
1
解决办法
1224
查看次数

如何使用mapreduce批量更新满足查询的数据存储区实体?

我想使用mapreduce库来更新满足查询的所有实体.有几个并发症:

  1. 查找要更新的实体的查询检查特定属性"property1"的值是否包含在来自csv文件的长值列表(~10000个条目)中
  2. 对于满足查询的每个实体,需要将另一个属性"property2"更新为等于第二列中的值和csv文件的同一行

我知道如何将csv文件上传到Blobstore并使用Blobstore输入阅读器读取每一行.我也知道使用查询获取实体的数据存储区输入阅读器.

我的问题是如何创建一个Mapper类,从Blobstore读取输入数据,获取数据存储区实体并尽可能高效地更新它们?

java google-app-engine mapreduce blobstore google-cloud-datastore

6
推荐指数
1
解决办法
816
查看次数

使用Google App引擎,云存储,数据存储的应用如何在中国运营?

开发使用Google Plaform的企业级移动应用程序(android/iOS/Web) - appengine,云端点,云存储,数据存储等.

是否在中国关闭了Google服务:

  1. Google App Engine
  2. Google云端存储
  3. Google Cloud DataStore

如果不是,我们可以

  1. 存储中国境外用户收集的数据?数据包含用户的个人信息
  2. 使用反向代理为中国用户提供服务

如何利用Google服务(GAE,GCS)在中国运营?他们使用AWS吗?

谢谢

google-app-engine mobile-application google-cloud-storage google-cloud-endpoints google-cloud-datastore

6
推荐指数
1
解决办法
1862
查看次数

Google数据存储区中查询的复杂性

我有一个Android应用程序,用户可以在其中发送私人消息.(例如:A向B和C发送消息,其中三个可以对该消息发表评论)

我使用谷歌应用引擎和谷歌的谷歌数据存储.(框架Objectify)我创建了一个Member实体和一个Message实体,它包含一个ArrayList<String>字段,代表收件人的列表.(也就是说Member实体的关键领域)

为了让用户获取他是其中一个收件人的所有邮件,我计划在Message数据存储上加载每个实体,然后通过检查该ArrayList<String>字段是否包含用户的id来选择它们.但是,考虑到可能存储了数十万条消息,我想知道这是否可能,如果这不会花费太多时间?

java google-app-engine google-cloud-datastore

6
推荐指数
1
解决办法
120
查看次数

如何修复错误:此服务需要项目ID,但无法确定

我正在尝试从AppEngine向Google Datastore插入数据,但我收到错误消息:

java.lang.IllegalArgumentException: A project ID is required for this service but could not be determined from the builder or the environment.  Please set a project ID using the builder.
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:92)
    at com.google.cloud.ServiceOptions.<init>(ServiceOptions.java:324)
    at com.google.cloud.datastore.DatastoreOptions.<init>(DatastoreOptions.java:85)
    at com.google.cloud.datastore.DatastoreOptions.<init>(DatastoreOptions.java:32)
    at com.google.cloud.datastore.DatastoreOptions$Builder.build(DatastoreOptions.java:75)
    at com.google.cloud.datastore.DatastoreOptions.defaultInstance(DatastoreOptions.java:123)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

Datastore datastore = DatastoreOptions.defaultInstance().service();     
             KeyFactory keyFactory = datastore.newKeyFactory().kind("keyKind"); 
             Key key = keyFactory.newKey("keyName"); 
             Entity entity = Entity.builder(key) 
                 .set("name", "John Doe") 
                 .set("age", 30) 
                 .set("access_time", DateTime.now()) 
                 .build(); 
             datastore.put(entity); 
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

google-app-engine google-cloud-datastore gcloud gcloud-java

6
推荐指数
2
解决办法
6249
查看次数

Cloud Firestore 事务的限制

我已阅读有关Firestore 上的事务更新操作的文档。根据配额和限制,交易只有两个限制:

  • 交易的最大大小:10 MiB
  • 交易时限:270秒,60秒空闲过期时间

没有明确提到与事务相关的限制,在事务期间可以读取和/或修改多少文档或集合,或者对发生事务更新的集合是否存在任何其他约束。

  1. 这是否意味着,只要更新保持在这些限制和其他一般限制范围内,客户端就可以对最多 500 个文档(每个文档位于不同的集合中)进行事务更新?

  2. 如果客户端在一个事务中读取多个文档,但只更新其中一个 - Firestore 是否仍然(静默)写入未修改的文档(用于序列化等)...所以我必须考虑每次写入 1 次的写入限制每秒的文档数,即使对于客户端未明确修改的文档也是如此。

PS:我问的原因是,Datastore 的事务限制为 25 个实体组,并且还会看到实体(“文档”)中的热点,这些热点在许多写入事务中是只读的。例如,请参阅Dan McGrath 的回答。我只是想知道 Firestore 具有哪些 Datastore 特征,并且在设计 Firestore 数据库时必须考虑这些特征。

database firebase google-cloud-datastore google-cloud-platform google-cloud-firestore

6
推荐指数
1
解决办法
4903
查看次数

该文档不存在,也不会出现在查询或快照中,但是结构相同的文档有效

前言:这里已经问过这个问题,但用户放弃了对第一个答案的解决方案。这个问题也不同,因为我有两个相似的集合结构,但是错误仅发生在其中一个上。

我正在使用Google的新的Firestore数据库,并创建了以下结构:区域/ {区域列表} /调度/ {调度列表} / {调度信息}

我们正在使用此方法通过Firebase Admin SDK在后端创建自定义令牌。当用户在后端登录时,我们会生成令牌并添加他们可以访问的区域作为其他声明,我们打算从安全规则中的auth / request.auth对象访问这些域,以限制他们对调度文档的访问相应地。我提到这个是为了防止我们错误地处理结构,在这种情况下,请纠正我,因为我们是Firestore的新手。

我们遇到的问题是其中一个文档发出警告:“此文档不存在,不会出现在查询或快照中”(请参见下图)。但是,我们有一个相同的文档结构(图像中的文档7)不会发出此警告,并且会出现在查询和快照中。 在此处输入图片说明

database firebase google-cloud-firestore

6
推荐指数
2
解决办法
3501
查看次数