我有一个PostgreSQL表格,其中有几百万行数据。我有多达20个进程向该表格写入(每秒几百个插入/更新),同时我也有一些进程从中读取(偶尔进行大型查询)。这导致读写两端都出现了很多故障(流关闭、输入/输出错误)。
我现在考虑将该表格分成多个表格。我将按对象的“类型”进行拆分,这基本上是一个只有20个可能值且分布相当的字段。
问题是,为了保证对数据的非阻塞访问,我应该使用多个表格、多个模式还是多个数据库。或者我应该使用完全不同的设置。另一个数据库?也许是HTable?
数据的完整性并不是那么重要。最终必须存在,但我确实不需要隔离级别或事务。我只需要一个快速的系统,可以从多个进程中读取和写入,而不会影响性能,并允许基于字段值进行查询。
现在我使用带有事务隔离级别TRANSACTION_READ_UNCOMMITTED和每个进程连接的JDBC。
更新:
模式如下:
我现在考虑将该表格分成多个表格。我将按对象的“类型”进行拆分,这基本上是一个只有20个可能值且分布相当的字段。
问题是,为了保证对数据的非阻塞访问,我应该使用多个表格、多个模式还是多个数据库。或者我应该使用完全不同的设置。另一个数据库?也许是HTable?
数据的完整性并不是那么重要。最终必须存在,但我确实不需要隔离级别或事务。我只需要一个快速的系统,可以从多个进程中读取和写入,而不会影响性能,并允许基于字段值进行查询。
现在我使用带有事务隔离级别TRANSACTION_READ_UNCOMMITTED和每个进程连接的JDBC。
更新:
模式如下:
CREATE TABLE rev
(
id integer NOT NULL,
source text,
date timestamp with time zone,
title text,
summary text,
md5sum text,
author text,
content text,
CONSTRAINT rev_id_pk PRIMARY KEY (id),
CONSTRAINT md5sum_un UNIQUE (md5sum)
)
CREATE TABLE resp
(
id integer NOT NULL,
source text,
date timestamp with time zone,
title text,
summary text,
md5sum text,
author text,
content text,
CONSTRAINT resp_id_pk PRIMARY KEY (id),
CONSTRAINT md5sum_un UNIQUE (md5sum)
)
我有一些字段上的索引。
一个样例查询看起来像:
SELECT * FROM rev LEFT JOIN resp ON rev.id = resp.parent_id WHERE rev.date > ? LIMIT 1000 OFFSET ?
resp
表要小得多,但它也会更新并在联接中进行查询。