6

我有 PostgreSQL 数据库。它用于单元测试。

  • 我想加快测试速度,所以我想使用某种内存数据库(例如 H2)。
  • 我想转储数据库(来自 PostgreSQL)并将这样的转储导入内存数据库。

您对内存数据库选择有什么建议吗?我希望该数据库与 PostgreSQL 兼容。

4

3 回答 3

4

我只需在 tmpfs 中创建一个数据库目录(在 PostgreSQL 中称为集群)(本质上是一个 RAM 磁盘——/dev/shm在大多数 Linux 发行版中都是这样配置的),然后在非标准端口上简单地运行 postgres,例如像这样:

initdb -D /dev/shm/pgtest
postmaster -D /dev/shm/pgtest -p 11111
于 2012-08-01T19:41:35.990 回答
3

我建议将HSQL与弹簧组合一起使用。我被带到我目前的职业中来做这件事,即使这很头疼,也可以做到。根据快速研究,似乎hsql 与 PostgreSQL 兼容。如果您还有其他问题,请告诉我。

于 2012-08-01T17:39:59.743 回答
0

你需要为此放弃Pg吗?

如果您针对不同的数据库进行单元测试,而不是在生产环境中运行,那么您的测试就不会那么好。

试试这个:优化 PostgreSQL 以进行快速测试

……看你怎么走。

更新:您可能认为将所有内容都放在 ramdisk 上会使您的测试大大加快,但您可能错了。让未使用的数据溢出到磁盘通常更有效,这样系统就可以为手头的任务使用更多的 RAM。使用unlogged表和正确的异步提交或(仅用于测试,会吃掉您的数据)fsync=off应该可以让您获得非常相似的速度。

如果您确实需要真正的内存表,请在 ramdisk 或 tmpfs 上创建一个文件系统,并在其中 initdb 一个新集群。您也可以使用UNLOGGED表,这样它们就不会通过预写日志。

请注意,虽然tmpfs它是一个 ramdisk,但它允许较少使用的页面进入交换空间。如果出于某种原因您绝对必须将所有数据固定在 RAM 中,则需要使用ramdisk驱动程序并在 ramdisk 上创建文件系统。我的建议:不要这样做。只需正确配置 Pg 即可进行快速测试。

于 2012-08-02T00:03:13.697 回答