小编Dan*_*ath的帖子

在重定向本地环境后,我是否应该期待过时的结果?

将新实体发布到数据存储区后,我将页面重定向到一个新URL,该URL列出该组中的所有实体.当我重定向时,页面显示过时的结果,我必须重新加载以查看数据存储区中的新实体列表.

我知道最终的一致性.这就是为什么我看到陈旧的结果?

例如,

我的数据存储区我有一个用户 - 用户1然后,在一个表单中,我添加一个用户 - 用户2这个实体被放到数据存储区然后我重定向到一个新的网址,即'get/users'

在重定向上我只看到用户1,但如果我刷新页面,我会看到用户2.我能保证或帮助防止陈旧结果吗?

google-app-engine browser-cache app-engine-ndb google-cloud-datastore

7
推荐指数
1
解决办法
713
查看次数

Firestore runTransaction()和脱机工作

我正在使用事务在Firestore中实现post喜欢和评论功能.我使用事务是因为我需要在帖子中的likes/comments子集和更新计数器中添加新字段,并且还将post id添加到用户喜欢/评论的帖子集合中.

我注意到如果我离线了,我就像这样请求我的帖子一切正常:

val postDocRef = FirebaseUtil.postsColRef.document(postId)

postDocRef.get().addOnSuccessListener { doc ->
    val post = doc.toObject(Post::class.java)
    Timber.e(post.toString())
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在事务中执行相同的异常抛出:

val postDocRef = FirebaseUtil.postsColRef.document(postId)

FirebaseUtil.firestore.runTransaction(Transaction.Function<Void> { transaction ->
    val post = transaction.get(postDocRef).toObject(Post::class.java)
}
Run Code Online (Sandbox Code Playgroud)

例外情况是:

com.google.firebase.firestore.FirebaseFirestoreException:UNAVAILABLE

为什么离线模式在交易中不起作用?是否可以在离线状态下实现此功能(在子集合中添加条目并在不同对象中更新字段)?

continueWithTask()调用链替换事务有什么缺点?

android firebase google-cloud-firestore

7
推荐指数
1
解决办法
1845
查看次数

客户端持久性(存储)

在我的演示中,我想避免使用传统的DB并将所有数据存储在客户端,例如通过表单提交的信息.

我有什么替代方案.我听说过Gears,但我没有任何实际经验.

我还可以存储除字符串之外的二进制信息,例如图像吗?

javascript flash google-gears

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

在双缓冲多线程系统中执行指针交换

当双缓冲由于在线程之间共享的数据时,我使用了一个系统,其中一个线程从一个缓冲区读取,一个线程从另一个缓冲区读取并从第一个缓冲区读取.麻烦的是,我将如何实现指针交换?我需要使用关键部分吗?没有可用的互锁功能实际交换值.我不能从缓冲区1读取一个线程,然后从缓冲区2开始读取,在读取过程中,这将是appcrash,即使其他线程没有开始写入它.

我在Visual Studio Ultimate 2010 RC中使用Windows上的本机C++.

c++ multithreading doublebuffered

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

在App Engine中查询Data Store的最有效方法

我有一个数据存储,其中包含大约150,000个实体.当我使用过滤器查询商店时,我的查询真的很慢.我的结构是完全平坦的,即每个实体都是彼此的兄弟.

1:使用GQL代替过滤器更好吗?

2:这不是Data Store的最佳用例,我应该使用SQL数据库吗?

这是我的代码示例:

// Look for a buy opportunity
dateFilter = new FilterPredicate("date", FilterOperator.EQUAL, dt);
scoreFilter = new FilterPredicate("score", FilterOperator.LESS_THAN_OR_EQUAL, 10.0);
safetyFilter = new FilterPredicate("score", FilterOperator.GREATER_THAN_OR_EQUAL, -1.0);
mainFilter = CompositeFilterOperator.and(dateFilter,scoreFilter,safetyFilter);
q = new Query("StockEntity",stockKey).setFilter(mainFilter);
q.addSort("score", Query.SortDirection.ASCENDING);

stocks = datastore.prepare(q).asList(FetchOptions.Builder.withLimit(availableSlots));
Run Code Online (Sandbox Code Playgroud)

更多细节:

  1. 150,000个记录,分为500个股票,每个股票约300个记录,日期范围内每天一个.

  2. 如上所述查询,其中传递了特定日期,并且基于"得分"有效地过滤了500个股票,期望返回的记录数量在10到20之间需要超过30秒才能完成,在我的开发机器.

还没有尝试推动生产,但我想我会尝试下一步 - 我认为不会有巨大的差异.我的开发机器是一个相当高的规格iMac.

java google-app-engine google-cloud-datastore

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

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

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

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

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

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

为什么在GAE上部署应用程序时,不会在数据存储区中创建名称为_BlobInfo_的实体类型?

当我们将文件上传到Google App Engine上的Blobstore时,我们发现每次上传_BlobInfo_都会创建一个类型的实体,可以在数据存储区查看器下的本地开发控制台中看到http://localhost:8888/_ah/admin,但是在将应用程序部署到App Engine之后,不会创建这样的实体当我们将文件上传到Blobstore时.它看起来很奇怪,想知道我在这里是否遗漏了什么.

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

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

谷歌App-Engine memcached非常慢

我最近推出了使用AppEngine后端运行的iPhone/Android应用程序.这是我在生产中使用AppEngine的第一次经历.

随着流量的增加,我开始遇到严重的延迟问题.目前最小空闲实例为1,max_pending_latency为1s.

是的,我方面有优化的空间,但我不明白

  1. 为什么延迟与请求/秒,流量,memoryUsage,memcacheUsage,任何事情都没有关联.我不明白为什么9月21日没有明显的延迟.

  2. 为什么对memcached的调用需要慢到500ms.(通常它快10倍).我正在使用NDB和1GB专用的memcached.增加到5GB没有效果.

这简直就是AppEngine的工作原理吗?我想得到你的见解.

谢谢

潜伏 每秒请求数 示例RPC

performance google-app-engine memcached latency

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

Objectify上下文未开始/ ObjectifyFilter缺失

App Engine(突然间)告诉我,我的Objectify设置不正确.据工作之前,我在我的web.xml中的客体筛选.

这是我日志中的完整堆栈跟踪:

javax.servlet.ServletContext log: unavailable
java.lang.IllegalStateException: You have not started an Objectify context.
                                 You are probably missing the ObjectifyFilter.
                                 If you are not running in the context of an http request, see the ObjectifyService.run() method.
    at com.googlecode.objectify.ObjectifyService.ofy(ObjectifyService.java:44)
    at com.mydomain.gae.defaultmodule.MyObject.loadEverything(MyObject.java:21)
    at com.mydomain.gae.defaultmodule.MyServlet.init(MyServlet.java:40)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:206)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:179)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:136)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:469)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308) …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine objectify google-cloud-datastore

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

在安全规则中使用引用

假设有两个文件

/orgs/foo
/users/alice
Run Code Online (Sandbox Code Playgroud)

/users/alice具有基准型场org其引用/orgs/foo.

/orgs/foo应该是可以访问的request.auth.uid == 'alice'.我怎样才能做到这一点?

我想这是这样的,但我无法弄明白.换句话说,我如何获取引用文档的ID?

function isOrgMember(orgId) {
  return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.org.__id__ == orgId;
}

match /orgs/{orgId} {
  allow read: isOrgMember(orgId);
}
Run Code Online (Sandbox Code Playgroud)

firebase firebase-security google-cloud-firestore

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