“postgresql”标签相关文章 »

十一月 05
PostgreSQL

我的 Mac OS X 系统里的 PostgreSQL 数据库是通过 MacPorts 安装的,默认配置容量非常小,只适合一般的小数据量试验之用,即使开发环境的数据增加到几万条,速度就明显慢了。

在 Mac OS X 下调整 PostgreSQL 的性能,需要做以下步骤:

1、调整postgresql.conf文件中参数,设置为你认为合理或者期望的数值。比如我会提高共享缓存数量到 128MB,并增大 work_mem 和 sort_mem 参数。调整完后,不出意外, PostgreSQL 服务将无法启动,查看其日志(注意,macports 安装的 PostgreSQL 的日志位于:/opt/local/var/log/postgresql83/postgres.log),报:

FATAL:  could not create shared memory segment: Cannot allocate memory
DETAIL:  Failed system call was shmget(key=5432001, size=139018240, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared \
memory segment exceeded available memory or swap space. To reduce the \
request size (currently 139018240 bytes), reduce PostgreSQL's shared_buffers \
parameter (currently 16384) and/or its max_connections parameter (currently 23).
The PostgreSQL documentation contains more information about shared \
memory configuration.

这是系统信号量不够,根据 PostgreSQL 官方网站文档 ,需要进行系统参数调整。

2、利用 sysctl 调整 kernel.sysv.* 相关参数。

先利用以下命令行测试可行的数量级别:

sysctl -w kern.sysv.shmall=327680
sysctl -w kern.sysv.shmmax=536870912

不断调整,不断尝试启动 PostgreSQL 服务,直到能正常启动。

3、最后将理想的 kern.sysv.* 相关参数写到 /etc/sysctl.conf 文件中,让系统启动的时候自动生效:

more /etc/sysctl.conf
kern.sysv.shmall=327680
kern.sysv.shmmax=536870912

调整完毕后,速度有明显提升。不过说实话,感觉没有 Ubuntu 桌面系统下高,也许有更多地方需要调整,有时间的时候好好研究一下。

dirk 发表于 2009-11-05 星期四
八月 07

PostgreSQL 从 8.3 开始内建了全文检索功能,对于我们来说,只需要再找一个中文分词组件即可利用 PostgreSQL 打造完善的全文检索应用。我选择的是 NlpBamboo 这个分词库。

以下是在 FreeBSD 7.2 + PostgreSQL 8.3 环境下的配置过程(FreeBSD 和 PostgreSQL 相关的安装和设置请自行找资料)。

1、安装 CMake:

cd /usr/ports/devel/cmake/
make install clean

2、安装 crf++:

cd /usr/ports/science/crf++/
make install clean

3、NlpBamboo 路径比较特殊,建立以下符号链接(其实不是全部需要;或者你偷懒一点,直接拷贝拉倒):

ln -s /usr/local/lib/libcrfpp.a /usr/lib/libcrfpp.a
ln -s /usr/local/lib/libcrfpp.so /usr/lib/libcrfpp.so
ln -s /usr/local/lib/libcrfpp.so.0 /usr/lib/libcrfpp.so.0

4、获取 NlpBamboo:

Google Code 取出 NlpBamboo 代码;或者从 NlpBamboo 下载打包文件。

5、进行 FreeBSD 下的补丁修改:

这里需要注意,由于 NlpBamboo 中的 bamboo 工具用到了 getline 这个函数,但 FreeBSD 默认没有提供,你可以找一个替代品。我比较偷懒,直接把相关代码注释掉了,因为我实际上根本不会在服务器上用这个工具。我都是在本地进行相关训练统计。

这个 nlpbamboo-freebsd.patch(2.0 KB) 是我当前在用的一个 Patch 文件,你可以参考。

6、编译并安装 NlpBamboo:

cd nlpbamboo-read-only # 这里应该是你自己解压或者代码取出后的目录
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=release
make all
make install

NlpBamboo 默认会安装到 /opt/bamboo/ 目录,有特殊要求,自己修改。

NlpBamboo 安装后的目录结构:

  • /opt/bamboo/bin/ : 可执行程序和训练脚本文件
  • /opt/bamboo/etc/ : 配置文件
  • /opt/bamboo/template/ : CRF训练模板文件 (.tmpl)
  • /opt/bamboo/processor/ : processor库
  • /opt/bamboo/exts/ : 扩展接口
  • /usr/lib/ : 动态链接库
  • /usr/include/bamboo/ : C/C++的头文件

7、下载分词库数据文件:

请到 NlpBamboo 下载 index.tar.bz2 或类似文件,解压到 /opt/bamboo/index 目录:

cd /opt/bamboo/
wget http://nlpbamboo.googlecode.com/files/index.tar.bz2
tar -jxvf index.tar.bz2

8、安装中文分词扩展到 PostgreSQL:

cd /opt/bamboo/exts/postgres/pg_tokenize/
gmake install
cd /opt/bamboo/exts/postgres/chinese_parser/
gmake install
touch /usr/local/share/postgresql/tsearch_data/chinese_utf8.stop

9、在需要的数据库中导入分词:

psql -Uddlog
ddlog=> \i /usr/local/share/postgresql/contrib/pg_tokenize.sql
ddlog=> \i /usr/local/share/postgresql/contrib/chinese_parser.sql

10、如果没有错误,你现在可以用以下命令测试了:

psql -Uddlog
ddlog=> SELECT to_tsvector('chinesecfg', '我爱北京天安门');
            to_tsvector
-----------------------------------
 '我':1 '爱':2 '北京':3 '天安门':4
(1 row)

更多关于 NlpBamboo 的资料,可以到 NlpBamboo Wiki 里好好研究一下。

恩,最后,怎么使用,可以参看 PostgreSQL 的帮助文档。或者等有空我写个在 Django 中的使用方法。

动物凶猛,路过注意:

  • 使用 PostgreSQL 8.3 更早版本的同学需要安装 tsearch2 才能使用;
  • 使用 FreeBSD 7.2 更早版本的同学请先升级,NlpBamboo 用到了 7.2 才新增 strndup(3) 函数;
  • 请更新 Ports 到最新版本,某些东西会有一定版本依赖,比如 NlpBamboo 需要 CMake 2.6 以上版本;
dirk 发表于 2009-08-07 星期五