小编Gee*_*nte的帖子

PostgresQL为膨胀表自动化VACUUM FULL

我们有一个使用PostgreSQL数据库服务器的产品,该服务器部署在几百个客户端上.多年来,他们中的一些人已经收集了数十亿字节的数据.因此,在下一版本中,我们将引入自动清理程序,该程序将在夜间批处理作业中逐步归档和删除旧记录.

如果我理解正确,autovacuum将启动并分析和重新组织元组,因此性能将与存在较少记录时的性能相同.

如果我理解正确的话,实际的磁盘空间将不会释放,因为只有VACUUM FULL才会发生,而且不会由autovacuum触发.

所以我在考虑一个可以做到这一点的自动化流程.

我在http://wiki.postgresql.org/wiki/Show_database_bloat找到了nagios check_postgres使用的膨胀视图.

这个观点有什么好处吗?我是否理解如果tbloat > 2,它可以使用VACUUM FULL?如果ibloat太高,它可以使用REINDEX吗?

以下作业的任何注释作为每日批处理作业运行?

  • vacuumdb -Z mydatabase #vacuum with analyze-only
  • select tablename from bloatview order by tbloat desc limit 1
  • vacuumdb -f -t tablename mydatabase
  • select tablename, iname from bloatview order by ibloat desc limit 1
  • reindexdb -t tablename -i iname mydatabase

当然,我仍然需要将它包装在crontab中的一个漂亮的perl脚本中(我们使用的是ubuntu 12),或者postgresql是否有某种调度程序我可以用它来做?

或者这总是过度杀伤,是否有一个更简单的程序?

postgresql nagios postgresql-9.1

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

这个班级是单身吗?

下面列出的类是单身人士吗?由于构造函数被声明为public,我可以推断该类是一个错误实现的单例吗?

public class CreateDevice extends Functionality{

  private static Simulator simulator;
  ConnectionDB connect = ConnectionDB.getInstance();


  public CreateDevice(Simulator simulator){
    this.simulator = simulator;
  }

  private static CreateDevice instance;
  synchronized public static CreateDevice getInstance() {
    if(instance == null){
      instance = new CreateDevice(simulator);
    }       
      return instance;
  }
}
Run Code Online (Sandbox Code Playgroud)

java design-patterns

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

为可能的空数组定义合同?

我正在尝试使用 Spring-Cloud-Contract 定义 CDC 合同,如下所示:

org.springframework.cloud.contract.spec.Contract.make {
    request {
        method 'GET'
        url $(client(~/\/categories\?publication=[a-zA-Z-_]+?/), server('/categories?publication=DMO'))
    }
    response {
        status 200
        headers {
            header('Content-Type', 'application/json;charset=UTF-8')
        }
        body """\
            [{
                "code": "${value(client('DagKrant'), server(~/[a-zA-Z0-9_-]*/))}",
                "name": "${value(client('De Morgen Krant'), server(~/[a-zA-Z0-9_\- ]*/))}",
                "sections" : []
            },
            {
                "code": "${value(client('WeekendKrant'), server(~/[a-zA-Z0-9_-]*/))}",
                "name": "${value(client('De Morgen Weekend'), server(~/[a-zA-Z0-9_\- ]*/))}",
                "sections" : [
                    {
                    "id" : "${value(client('a984e824'), server(~/[0-9a-f]{8}/))}",
                    "name" : "${value(client('Binnenland'), server(~/[a-zA-Z0-9_\- ]*/))}"
                    }
                ]
            }]
        """
    }
}
Run Code Online (Sandbox Code Playgroud)

在生成的测试中,这会导致以下断言:

DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
assertThatJson(parsedJson).array().contains("code").matches("[a-zA-Z0-9_-]*");
assertThatJson(parsedJson).array().array("sections").contains("id").matches("([0-9a-f]{8})?");
assertThatJson(parsedJson).array().array("sections").contains("name").matches("[a-zA-Z0-9_\\- ]*");
assertThatJson(parsedJson).array().contains("name").matches("[a-zA-Z0-9_\\- ]*"); …
Run Code Online (Sandbox Code Playgroud)

spring-cloud spring-cloud-contract

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

如何使用 Quarkus/RestAssured 仅为一个测试用例注入模拟

我正在尝试使用放心测试 REST 控制器(使用 Quarkus)端点。我想模拟一个注入到该控制器中的类(最好使用 Mockio),但仅限于我的一个测试。或者让每个测试用例获得不同的行为,而不必为每个测试使用单独的类。我不知道该怎么做?

我从文档中看到了这样做的方式:

@Mock
@ApplicationScoped 
public class MockExternalService extends ExternalService {

    @Override
    public String service() {
        return "mock";
    }
}
Run Code Online (Sandbox Code Playgroud)

但这只允许我对所有测试使用一个模拟,而不是像使用 Mockito 那样根据测试模拟某些行为。我认为?

我尝试创建一个模拟并用 @Mock 对其进行注释

    @Mock
    public TableExtractorService tableExtractorServiceMock = Mockito.mock(TableExtractorService.class);;
Run Code Online (Sandbox Code Playgroud)

但当我使用它时,我仍然得到了真正的实现。我在控制器中使用带有 @Inject 注释的构造函数,该构造函数采用 TableExtractorService。

有关更多信息,我使用 resassured 进行的测试如下所示:

InputPart filePart = Mockito.mock(InputPart.class);
Mockito.when(tableExtractorServiceMock.Extract(anyObject()))
       .thenThrow(IOException.class);
        
final InputStream inputStream = filePart.getBody(InputStream.class, null);

given()
                .multiPart("file", inputStream)
                .when().post("/document")
                .then()
                .statusCode(500);
Run Code Online (Sandbox Code Playgroud)

该端点调用我尝试模拟的服务类,并且我希望该模拟返回异常。

java unit-testing quarkus

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

无法在intellijIDEA中找到JDK x64

我正在开始一个新项目,客户要求我们在IntelliJIdea中工作.我安装它并尝试进行ant构建.它转变为我需要64位jdk进行构建.所以我安装了它.现在,我需要在IntelliJIdea中配置它.这是我得到的信息:

未配置运行此ANT目标所需的JDK(1.6_x64).请更新项目中的设置 图书馆菜单.

有人可以帮我找到这个Project | Libraries menu菜单吗?

java configuration intellij-idea

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

连接拒绝从 docker 连接到 Elasticsearch docker 容器

我正在尝试从同样位于容器内的 Java 应用程序访问容器内的 Elasticsearch 数据库。

它们都在以下 docker-compose.yml 中:

version: "3.7"
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elastic

  java-app:
    image: neileen/dockerhub_app:java-latest
    ports:
      - "8080:8080"
    depends_on:
      - es
    networks:
      - elastic

networks:
  elastic:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用桥接网络使容器彼此可见和可访问。

在我的 Java 应用程序中,我使用 RestHighLevelClient:

RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost("es", 9200, "http")));
Run Code Online (Sandbox Code Playgroud)

我还尝试使用“localhost”和“0.0.0.0”作为主机名而不是“es”,但没有结果。

我不断得到的例外是:

java-app_1     | The cluster is unhealthy: Connection refused
java-app_1     | java.net.ConnectException: Connection refused
java-app_1     |        at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:804)
java-app_1     |        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:225)
java-app_1     |        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:212) …
Run Code Online (Sandbox Code Playgroud)

java elasticsearch docker

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