【发布时间】:2010-03-21 08:42:40
【问题描述】:
目前正在从 SQL Server 迁移到 PostgreSQL,并正在尝试改进几个关键领域:
我有一个文章表:
CREATE TABLE [dbo].[Articles](
[server_ref] [int] NOT NULL,
[article_ref] [int] NOT NULL,
[article_title] [varchar](400) NOT NULL,
[category_ref] [int] NOT NULL,
[size] [bigint] NOT NULL
)
数据(逗号分隔的文本文件)每天由大约 500 个(大约 1000 个)服务器转储到导入服务器上。
进口:
- “文章”表中的索引已禁用。
- 对于每个转储的文本文件
- 数据被 BULK 复制到临时表中。
- 临时表已更新。
- 服务器的旧数据已从“文章”表中删除。
- 临时表数据被复制到 Articles 表中。
- 临时表已删除。
一旦为所有服务器完成此过程,就会构建索引并将新数据库复制到 Web 服务器。
我对这个过程相当满意,但在我努力实现实时(哈哈!)系统时,总是有改进的余地。我在做什么正确吗? Articles 表包含约 5 亿条记录,并且预计会增长。搜索此表是可以的,但可能会更好。即SELECT * FROM Articles WHERE server_ref=33 AND article_title LIKE '%criteria%' 已经令人满意,但我想提高搜索速度。显然,“LIKE”是我的问题。建议? SELECT * FROM Articles WHERE article_title LIKE '%criteria%' 太可怕了。
分区是 SQL Server Enterprise 的一项功能,但 $$$ 是 PostgreSQL 众多令人兴奋的前景之一。导入过程(删除数据、插入数据)和构建索引会对性能造成什么影响?数据库会大幅增长吗?
数据库目前为 200 GB,并将不断增长。通过网络复制它并不理想,但它可以工作。我正在考虑改变系统的硬件结构。拥有一个导入服务器和一个 Web 服务器的思想过程是,导入服务器可以做脏活(没有索引),而 Web 服务器(有索引)可以呈现报告。也许将系统减少到一台服务器可以跳过网络阶段的复制。这台服务器将有两个版本的数据库:一个带有用于交付报告的索引,另一个不用于导入新数据。数据库每天都会交换。想法?
这是一个了不起的系统,不管你信不信,通过给它一个大的震动,我的疯狂有一些方法。
更新:我不是在寻求关系数据库方面的帮助,而是希望与数据仓库专家交流想法。
【问题讨论】:
-
不要使用 LIKE,而是使用全文索引(postgres 和 mysql 在某种程度上都支持),或者像 lucene 这样的完全外部搜索解决方案。
-
我知道这两种技术,但已经有几年没有接触过它们了。我会做一些阅读。
标签: sql-server database-design postgresql