小编Cro*_*ool的帖子

Postegresql在Windows上缓慢连接时间

我注意到与PostgreSQL的连接非常慢.

import psycopg2
import time

start_time = time.time()
try:
    db = psycopg2.connect("dbname='xx' user='xxx' host='127.0.0.1' password='xxx' port='5433'")
except Exception as e:
    print(e)
    exit(1)

print('connect time', time.time() - start_time)
Run Code Online (Sandbox Code Playgroud)

通常的连接时间为2.5-3.5秒.连接时间3.3095390796661377

它几乎是新安装的PostgreSQL的默认配置.我关闭了log_hostname但它没有改变任何东西.我已经运行了PostgreSQL 9.4和10,两者都有同样的问题.我正在使用这台机器进行开发,但即便如此,我注意到它,因为我的Django请求需要2.5-3.5秒,这使得即使对于开发也难以忍受.

Windows 10 Python 2/3 psycopg2 2.7.4

这里包转储

这里有来自PostgreSQL的max debug的相关日志

2018-03-19 21:24:43.654 +03 [10048] DEBUG:  00000: forked new backend, pid=21268 socket=5072
2018-03-19 21:24:43.654 +03 [10048] LOCATION:  BackendStartup, postmaster.c:4099
2018-03-19 21:24:45.248 +03 [21268] LOG:  00000: connection received: host=127.0.0.1 port=9897
Run Code Online (Sandbox Code Playgroud)

它分叉新的后端,然后仅2秒后收到日志连接

UPD

即使我设法避免PostgreSQL的连接延迟(例如通过pgbouncer,或者如果PostgreSQL在docker中运行)请求仍然需要1.3-2秒,但从第一个发送包到最后只有0.022秒,所有其他时间idk发生了什么但是不是客户端和服务器之间的网络通信.如果在docker中运行相同的代码 - 0.025秒.从Windows - 1.3-2秒但网络交互只有0.022秒

实际上有两个问题可能是由同一件事或不同引起的,不知道.

1)由于未知原因,Postgresql没有发送数据包1.8秒

2)即使第一个问题被消除,网络交互下降到0.022秒,整个事情仍需要1.3-2秒(使用psql或psycopg2)

windows postgresql psycopg2

7
推荐指数
0
解决办法
409
查看次数

响应中的GetEntity与ReadEntity(Javax.ws.rs)

我正在编写一个客户端来使用RestService,我必须从响应中读取一个实体,我完全混淆了应该使用哪个方法(getEntityvs readEntity).

每当我收到WebApplicationException时,我都必须检索实体.

所以,我的代码或多或少看起来像.

catch(WebApplicationException ex) {
// Do something with ex.getResponse
}
Run Code Online (Sandbox Code Playgroud)

从我测试过的,

ex.getResponse().hasEntity() ---> true

ex.getResponse().getEntity() == null ---> true
Run Code Online (Sandbox Code Playgroud)

我不知道它是如何工作的,但如果第一个是真的,那么第二个陈述是如何成真的.

令人惊讶的是,readEntity对我来说很好,我能够从响应中读出实体.

但是,通过readEntity读取实体后,

这个电话给出了错误.

 ex.getResponse().getEntity() == null --> false
Run Code Online (Sandbox Code Playgroud)

有人能帮我理解幕后真的发生了什么吗?

java rest jax-rs

5
推荐指数
2
解决办法
5722
查看次数

为什么 Lombok 的 @Builder 中有包私有构造函数?

最近,我遇到了 Lombok 的构建器,坦白说很喜欢它。然后我了解到许多资源(例如Effective Java)都描述了Builder 模式。 有点像这样

现在,在此模式中,构造函数保持私有,以便只能通过使用构建器来创建类的实例。

但是,在 Lombok 的构建器文档中,构造 函数可见性保持为包私有。将其保留为私有包的原因可能是什么?

java builder lombok

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

创建异步模型时的单个 SQS 队列与多个 SQS 队列

我必须开发一个组件,其中 API 本质上是异步的。为了开发这个异步模型,我将使用 Aws SQS 队列来发布消息,客户端将从队列中读取并将响应发送回队列。现在我必须公开 10 个 API(当前)。目前,我可以考虑为所有 API 设置一个请求和一个响应队列(我将轮询),并且 API 的有效负载可以由某些操作定义。另一种方法是为每个 API 使用单独的队列。我可以看到多个队列的优点是每个 API 可以有不同的流量,拥有多个队列可以帮助队列的客户端有效地扩展。这两种方法的其他优缺点是什么?

amazon-sqs amazon-web-services

4
推荐指数
1
解决办法
3193
查看次数

编写具有公共字段的 pojo 的最佳方法

我目前正在制作一项服务,其中有很多公共 API。并且响应和请求对象重叠很多。所以,我在想有没有一种方法可以概括请求/响应对象的 pojo 创建。有时,响应对象与具有一两个额外字段的请求对象相同。

让我给你举个例子。

@Data
public class Request {
    private A objA;
    private B objB;
}

@Data
public class Response {
    private A objA;
    private B objB;
    private C objC;
}

@Data
public class A {
    private D objD;
}

@Data
public class B {
    private String sB; 
    private E obje;
}

@Data
public class C {
    private String sC;
}
Run Code Online (Sandbox Code Playgroud)

类似地,D 和 E 也是 pojo。问题是请求/响应对象中有很多相似之处(重叠字段)。

java pojo

3
推荐指数
1
解决办法
3887
查看次数

如何用可选的替换get梯子?

我有一个类结构,如

 Class A {
     int val;
  }

 Class B {
   A a;
 }

 Class C {
   B b;
 }
Run Code Online (Sandbox Code Playgroud)

现在,所有类都来自第三方服务,我从中获得响应,我想读取int值.但我不想做类似的事情

假设c是C类型的变量.

if (c != null && c.getb != null) {
 B b = c.getb()
  and so on.
 }
Run Code Online (Sandbox Code Playgroud)

我想避免这些空检查,因为实际上这些pojos是非常分层的并且在它们中有很多字段.

我试过用

Optional<Integer> val = Optional.ofNullable(c.getb().geta().getval());
val.elseThrow(Ex::new)
Run Code Online (Sandbox Code Playgroud)

但这不是正确的方法(如果b不存在则抛出空指针异常,因为int上是可选的).我怎么办才能解决这样一种情况,即我无法控制Pojos的声明,但又想避免牛市检查?

java java-8

3
推荐指数
1
解决办法
216
查看次数

@Accessors(fluent = true) 来自 lombok 和 mapstruct

我有一个下游服务,我想将其 bean 映射到我的 bean。但是使用mapstruct似乎有问题。

来自下游服务的 Pojo(我无法更改其定义)

@ToString
@Getter
@Setter
@Accessors(fluent = true)
public class PojoA {
   private String stringA;
   private int integer;
}
Run Code Online (Sandbox Code Playgroud)

我想把它转换成 PojoB

@Setter
@Getter
@ToString
public class PojoB {
    private String stringB;
    private int integer;
}
Run Code Online (Sandbox Code Playgroud)

映射器接口

@Mapper
public interface PojoMapper {

    PojoMapper INSTANCE = Mappers.getMapper(PojoMapper.class);
    @Mapping(source = "stringA", target = "stringB")
    PojoB pojoAToPojoB(PojoA pojoA);
}
Run Code Online (Sandbox Code Playgroud)

这失败了,因为它无法找到 getter 作为 fluent 从 getter 中删除前缀,我知道 mapstruct 生成映射器接口的实现并使用 bean 规范(即获取和设置前缀)

有没有办法克服它?

lombok java-8 mapstruct

2
推荐指数
1
解决办法
2076
查看次数

如果出现平局,如何使minmax_element返回索引最少的元素

#include<utility>
#include<alogrithm>
#include<iostream>
using namespace std;
int main(void)
{
  int n=5;
  int s[]={3,5,1,5,5};
  auto r=minmax_element(s,s+n);
  cout<<r.second-s<<endl;
  cout<<*r.second;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是使用索引打印数组中最大元素的代码.我想要索引最小的最大元素(如果是平局,则为第一个最大值)

如何修改上面的代码以获得结果.

c++ std stl-algorithm c++14

0
推荐指数
1
解决办法
109
查看次数