小编Dan*_*Dan的帖子

如何使用Google App Engine Search API查找最近的文档?

我在GAE搜索索引中有大约400,000个文档.所有文件都有location GeoPoint财产,遍布全球.有些文件可能距离任何其他文件超过4000公里,其他文件可能在相距数米的范围内聚集.

我想找到最接近特定坐标集的文档,但发现以下代码给出了不正确的结果:

from google.appengine.api import search

# coords are in the form of a tuple e.g. (50.123, 1.123)
search.Document(
    doc_id='meaningful-unique-id',
    fields=[search.GeoField(name='location' 
                            value=search.GeoPoint(coords[0], coords[1]))])

# find document function radius is in metres
def find_document(coords, radius=1000000):
    sort_expr = search.SortExpression(
        expression='distance(location, geopoint(%.3f, %.3f))' % coords,
        direction=search.SortExpression.ASCENDING,
        default_value=0)

    search_query = search.Query(
        query_string='distance(location, geopoint(%.3f, %.3f)) < %d' \
                    % (coords[0], coords[1], radius),
        options=search.QueryOptions(
            limit=1,
            ids_only=True,
            sort_options=search.SortOptions(expressions=[sort_expr])))

    index = search.Index(name='document-index')
    return index.search(search_query)
Run Code Online (Sandbox Code Playgroud)

使用此代码,我将得到一致但不正确的结果.例如,搜索距离伦敦最近的文件表明最接近的文件在苏格兰.我已经证实有成千上万的文件.

我将问题缩小到radius参数太大.如果半径下降到12km左右,我得到的结果是正确的radius=12000.在12公里半径内通常不超过1000个文件.(可能与search.SortOptions(limit=1000).相关联.)

问题是,如果我在地球的一个稀疏区域,那里没有任何数千英里的文件,我的搜索功能将不会返回任何东西 …

google-app-engine python-2.7 gae-search

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

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

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

google-app-engine google-cloud-datastore

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

如何为StatefulSet静态配置卷?

我正在使用Google Kubernetes Engine,希望我StatefulSet使用以前创建的磁盘,my-app-disk而不是为该集中的每个副本动态创建新的永久磁盘。我的配置如下:

PersistentVolume yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-app-data
  labels:
    app: my-app
spec:
  capacity:
    storage: 60Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: my-app-disk
    fsType: ext4
Run Code Online (Sandbox Code Playgroud)

PersistentVolumeClaim yaml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-app-data
  labels:
    app: my-app
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 60Gi
  selector:
    matchLabels:
      app: my-app
Run Code Online (Sandbox Code Playgroud)

StatefulSet yaml:

apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: my-stateful-set
spec:
  serviceName: my-stateful-set
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform kubernetes google-kubernetes-engine

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

如何为 Docker Alpine 映像构建静态 Go 二进制文件?

我想构建一个 Go 1.9.2 二进制文件并在 Docker Alpine 映像上运行它。我写的 Go 代码没有调用任何 C 代码。它还使用net包。不幸的是,它并不像听起来那么简单,因为 Go 似乎并不是一直都在构建静态二进制文件。当我尝试执行二进制文件时,我经常收到关于为什么二进制文件没有执行的神秘消息。互联网上有很多关于此的信息,但大多数信息最终都是人们使用试验错误来使他们的二进制文件工作。

到目前为止,我发现了以下作品,但是我不知道为什么,如果它是最佳的,或者是否可以简化。

env GOOS=linux GARCH=amd64 go install -v -a -tags netgo -installsuffix netgo -ldflags "-linkmode external -extldflags -static"
Run Code Online (Sandbox Code Playgroud)

构建将在 Alpine 3.7 docker 映像上运行的 Go 二进制文件的规范方法(如果存在)是什么?apk如果这会让事情变得更高效/更容易,我很乐意用来将软件包安装到 Alpine 映像。(相信我ca-certificates无论如何都需要安装。)

go docker alpine-linux

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

集群 IP 和节点端口 IP 地址是否在不同节点之间进行负载平衡?

我有一个名为“backend-app”的应用程序部署,在多个不同节点上的 Pod 中运行。我还有一项服务公开“后端应用程序”,供其他集群内部 Pod 作为我的“前端应用程序”Pod 访问。

如果我使用 DNS 从名为“frontend-app”的不同应用程序部署连接到“backend-app”,请求是否会负载均衡到每个节点上的每个“backend-app”pod?

听起来 NodePort 服务只会连接到一个节点,不会将我的请求负载平衡到其他节点。

kubernetes

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

为什么App Engine与我的本地机器相比显示不同的浮动舍入结果?

如果你把下列App Engine的壳牌'50.49'.该结果在2.5和2.7运行时都是一致的.

 >> a = '%0.2f' % (round(float(u'50.485'), 2),)
 >> a
'50.49'
Run Code Online (Sandbox Code Playgroud)

但是,如果我把同样的东西放到运行python 2.7.1的本地MacBook Pro中,我会得到'50.48'.

 >> a = '%0.2f' % (round(float(u'50.485'), 2),)
 >> a
'50.48'
Run Code Online (Sandbox Code Playgroud)

为什么会有所不同?如何在本地计算机和App Engine的服务器之间保持一致?

python google-app-engine

5
推荐指数
1
解决办法
408
查看次数

App Engine 灵活环境可以连接到永久磁盘吗?

我想在 App Engine 灵活环境上运行一个进程,该进程需要访问传统文件系统以保存重新启动后仍然存在的信息。

这可能吗? (我只看到临时磁盘的文档。)如果没有,是否有任何解决方法?

google-app-engine

5
推荐指数
1
解决办法
1299
查看次数

如何找出负载均衡器服务的外部IP?

我正在Google Cloud Platform上使用Kubernetes Engine。我有一个在Docker临时容器中运行进程的Pod。我还有一个负载平衡器服务,可让我从外界访问Pod。

在Pod中运行的进程需要知道其外部IP地址是什么。我怎么能得到这个?

在使用Kubernetes Engine之前,我使用的是Compute Engine,可以通过以下方式找到外部IP地址:

curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip
Run Code Online (Sandbox Code Playgroud)

有什么我可以使用的内部工具可以用于我的流程吗?还是我需要调用可镜像IP地址的外部站点的过程?

google-compute-engine google-cloud-platform kubernetes google-kubernetes-engine

5
推荐指数
1
解决办法
2741
查看次数

如何配置Google Load Balancer在Kubernetes yaml中具有IPv4和IPv6前端?

我正在使用GKE 1.10.2-gke.3,想知道如何使用Google Load Balancer Ingress yaml配置IPv4和IPv6连接。

我可以配置IPv4或IPv6,但不能同时配置两者。我的yaml文件在下面。假设我保留了分别称为app-static-ipv4和app-static-ipv6的静态IPv4和IPv6地址。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: app-static-ipv6
spec:
  tls:
  - secretName: tls-certificates
  backend:
    serviceName: app-service
    servicePort: 8080
Run Code Online (Sandbox Code Playgroud)

google-compute-engine kubernetes google-kubernetes-engine

5
推荐指数
1
解决办法
481
查看次数

如何重新运行 Apache Flink Postgres JDBC 作业而不出现“找不到合适的驱动程序”异常

我有一个源自Maven 入门项目的Flink 作业。该作业有一个打开 Postgres JDBC 连接的源。我正在使用示例docker-compose.yml在我自己的 Flink 会话集群上执行该作业。

当我第一次提交作业时,它执行成功。当我尝试再次提交时,出现以下错误:

Caused by: java.sql.SQLException: No suitable driver found for jdbc:postgresql://host.docker.internal:5432/postgres?user=postgres&password=mypassword
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at com.myorg.project.JdbcPollingSource.run(JdbcPollingSource.java:25)
    at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:110)
    at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:66)
    at org.apache.flink.streaming.runtime.tasks.SourceStreamTask$LegacySourceFunctionThread.run(SourceStreamTask.java:269)
Run Code Online (Sandbox Code Playgroud)

我必须重新启动集群才能重新运行我的作业。为什么会发生这种情况?如何在不重启集群的情况下再次提交作业?

Maven 入门项目的唯一补充是:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.24</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Flink 源代码除了打开 JDBC 连接之外什么也不做,如下所示:

package com.mycompany;

import org.apache.flink.streaming.api.functions.source.RichSourceFunction;

import java.sql.Connection;
import java.sql.DriverManager;

public class JdbcSource extends RichSourceFunction<Integer> {

    private final String connString;

    public JdbcSource(String connString) {
        this.connString = connString;
    }

    @Override
    public void run(SourceContext<Integer> ctx) throws Exception …
Run Code Online (Sandbox Code Playgroud)

java classloader apache-flink flink-streaming

5
推荐指数
1
解决办法
1282
查看次数