我们有一个使用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-onlyselect tablename from bloatview order by tbloat desc limit 1vacuumdb -f -t tablename mydatabaseselect tablename, iname from bloatview order by ibloat desc limit 1reindexdb -t tablename -i iname mydatabase当然,我仍然需要将它包装在crontab中的一个漂亮的perl脚本中(我们使用的是ubuntu 12),或者postgresql是否有某种调度程序我可以用它来做?
或者这总是过度杀伤,是否有一个更简单的程序?
下面列出的类是单身人士吗?由于构造函数被声明为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) 我正在尝试使用 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) 我正在尝试使用放心测试 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)
该端点调用我尝试模拟的服务类,并且我希望该模拟返回异常。
我正在开始一个新项目,客户要求我们在IntelliJIdea中工作.我安装它并尝试进行ant构建.它转变为我需要64位jdk进行构建.所以我安装了它.现在,我需要在IntelliJIdea中配置它.这是我得到的信息:
未配置运行此ANT目标所需的JDK(1.6_x64).请更新项目中的设置 图书馆菜单.
有人可以帮我找到这个Project | Libraries menu菜单吗?
我正在尝试从同样位于容器内的 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)