我正在从SQLite切换到PostgreSQL,用于典型的Rails应用程序.
问题是PG的运行规格变得缓慢.
在SQLite上花了大约34秒,在PG上它是~76秒,这慢了2倍.
所以现在我想应用一些技术来使规范的性能与SQLite相提并论,而不需要修改代码(理想情况下只需设置连接选项,这可能是不可能的).
从头到尾有几件显而易见的事情是:
你可能已经明白我不关心可靠性和其余的(DB在这里只是一次性的东西).
我需要充分利用PG并尽可能快地完成它.
理想情况下,最佳答案将描述这样做的技巧,设置和这些技巧的弊端.
更新: fsync = off
+ full_page_writes = off
仅将时间减少到~65秒(〜-16秒).良好的开端,但远远没有34的目标.
更新2:我尝试使用RAM磁盘,但性能增益在误差范围内.所以似乎不值得.
更新3:* 我找到了最大的瓶颈,现在我的规格和SQLite一样快.
问题是进行截断的数据库清理.显然SQLite在那里太快了.
为了"修复"它,我在每次测试之前打开一个事务并在结束时回滚它.
约700个测试的一些数字.
SQLite的速度提高了2倍.PG的速度提高4倍.
您好我的应用程序访问Postgres数据库,我有许多预定义的查询(排名,分区,复杂的连接等)我对Postgres.现在我想用小测试数据对这些查询行为进行单元测试.所以我从H2/Junit开始.我发现大多数Postgres查询比如Rank,Partition,Complex case等更新等等.所以我想到使用H2 PosgreSQL兼容模式,认为所有的postgres查询都适用于H2,如果我错了请纠正我.
我按照H2文档说使用PostgreSQL模式,使用数据库URL jdbc:h2:〜/ test; MODE = PostgreSQL或SQL语句SET MODE PostgreSQL.
我启用模式使用SET MODE PostgreSQL
,我试图触发一个涉及rank()的查询并在postgres中工作,但它不起作用H2.它给了我以下例外
Function "RANK' not found; in SQL statement
Run Code Online (Sandbox Code Playgroud)
请指导我是H2和数据库测试的新手.提前致谢.我正在使用H2 jdbc驱动程序来解决postgres查询,认为H2 Posgress兼容模式将允许我触发postgres查询.
我有PostgreSQL数据库.它用于单元测试.
您对内存数据库的选择有什么建议吗?我希望该数据库与PostgreSQL兼容.
我正在运行各种测试,这些测试在数据库中花费了大量时间.
我想把它全部保留在内存中并且不要触摸数据库,希望这会加快速度.就像使用sqlite3的内存中选项一样.我不需要持久性/持久性/诸如此类,测试后一切都会立即丢弃.
那可能吗?我尝试调整我的postgres内存相关变量(如下面的解决方案),但这似乎并没有影响它执行的db写入次数,我找不到任何看起来像'内存'选项的东西.
https://dba.stackexchange.com/questions/18484/tuning-postgresql-for-large-amounts-of-ram
我想分享一个Node
repo,理想情况下它应该在通常的yarn install && yarn start
.
但是,pg
既不能连接SELECT
到/从尚不存在的数据库和表。
这很麻烦,但目前需要这些前面的步骤:
docker run --name my-postgres -e POSTGRES_PASSWORD={MY_PASSWORD} -p 5432:5432 -d --rm postgres:13.0
docker exec -it -u postgres my-postgres psql
CREATE DATABASE MY_DB
\connect MY_DB
CREATE TABLE my_table (
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
field_1 VARCHAR ( 50 ) UNIQUE NOT NULL,
field_2 INT NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)
因为我已经从泊坞窗获得的Postgres,是docker-componse
在合理的解决方案?我不太熟悉dockerfile
,有没有其他选择?
在节点中初始化 postgres 数据库的最佳实践是什么? …
我正在为学校做一个项目,需要在maven项目中用postgresql替换hsqldb.
目前我们通过运行启动hsql Server
mvn exec:java -P hsqldb
据我所知,这会查找pom.xml中的hsqldb配置文件
<profile>
<id>hsqldb</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.hsqldb.server.Server</mainClass>
<arguments>
<argument>-database.0</argument>
<argument>db/name</argument>
<argument>-dbname.0</argument>
<argument>name</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Run Code Online (Sandbox Code Playgroud)
所以我需要使用postgres设置重新发布这部分,我已经添加了postgres作为依赖.
<mainClass>ServerClass</mainClass>
Run Code Online (Sandbox Code Playgroud)
是我最大的问题,因为我无法在postgresql jar中找到主服务器类
postgresql ×6
java ×3
database ×1
docker ×1
h2 ×1
hsqldb ×1
jdbc ×1
maven ×1
node.js ×1
performance ×1
sql ×1
testing ×1
unit-testing ×1