LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: crazyrain

有没有pacman使用sqlite的想法?

[复制链接]
发表于 2010-12-20 09:33:38 | 显示全部楼层
只要算法妥当, 文件结构合理, 文本文件肯定比数据库要快的.
回复 支持 反对

使用道具 举报

发表于 2010-12-20 09:46:38 | 显示全部楼层
Post by zzz654321;2123522
只要算法妥当, 文件结构合理, 文本文件肯定比数据库要快的.


pacman这种算是“文件数据库”而不算“文本数据库”……

pacman检索这些文本是需要大量的IO资源的,肯定没sqlite这种单个文件检索快。
回复 支持 反对

使用道具 举报

发表于 2010-12-20 11:45:46 | 显示全部楼层
我估计还是算法问题, 如果其中牵涉文件打开关闭次数很多, 肯定就慢, 也许可以缓存一下.
没有仔细看算法哈, 只是猜测.
回复 支持 反对

使用道具 举报

发表于 2010-12-20 13:25:50 | 显示全部楼层
Post by zzz654321;2123522
只要算法妥当, 文件结构合理, 文本文件肯定比数据库要快的.


数据库不就是算法妥当,文件结构合理的文件么。
回复 支持 反对

使用道具 举报

发表于 2010-12-20 14:44:48 | 显示全部楼层
我记得这个问题讨论很多次了都,官方仍然是继续保持现有格式,而是提高pacman的效率,当初pacman比现在更慢,现在貌似是有了缓存机制。

现在这样的好处是可以非常容易的更改依赖关系。
回复 支持 反对

使用道具 举报

发表于 2010-12-21 02:24:19 | 显示全部楼层
更加激进的方法,放进内存。。可选把sync还是local放进内存,或者都放进,只放sync比较安全,这样哪怕突然掉电也仅仅损失同步数据库,重新同步一下就好了。就算都放进去会可能丢失的是本次启动后更新的数据库,因为有备份,下次启动会恢复,还算安全。

通过/etc/conf.d/pacmandb.conf来修改将那个db放入内存,还有整个db的大小限制,这个实际大小是动态的,限制是最大容量。

使用方法只需要将两个文件放入相应位置,然后/etc/rc.d/pacmandb start|stop|restart就可以了。可以放入rc.conf

/etc/rc.d/pacmandb
  1. #!/bin/bash
  2. . /etc/rc.conf
  3. . /etc/rc.d/functions
  4. . /etc/conf.d/pacmandb.conf
  5. CONFIG=/etc/pacman.conf
  6. function readconf() {
  7.   match=0
  8.   while read line; do
  9.     # skip comments
  10.     [[ $line =~ ^\ {0,}# ]] && continue
  11.     # skip empty lines
  12.     [[ -z "$line" ]] && continue
  13.     # still no match? lets check again
  14.     if [ $match == 0 ]; then
  15.     # do we have a section tag ?
  16.       if [[ $line =~ ^\[.*?\] ]]; then
  17.         #strip []
  18.         line=${line:1:$((${#line}-2))}
  19.         # strip whitespace
  20.         section=${line// /}
  21.         # do we have a match ?
  22.         if [[ "$section" == "$1" ]]; then
  23.             match=1
  24.             continue
  25.         fi
  26.         continue
  27.       fi
  28.     # found next section after config was read - exit loop
  29.     elif [[ $line =~ ^\[.*?\] && $match == 1 ]]; then
  30.         break
  31.     # got a config line eval it
  32.     else
  33.       var=${line%%=*}
  34.       var=${var// /}
  35.       value=${line##*=}
  36.       value=${value## }
  37.       eval "$var='$value'"
  38.     fi
  39.     done < "$CONFIG"
  40. }
  41. readconf options
  42. [ -z "$DBPath" ] && DBPath=/var/lib/pacman
  43. case "$1" in
  44.   start)
  45.     stat_busy "Starting pacmandb"
  46.     mount pacman $DBPath -t tmpfs -o rw,noatime,nodiratime,noexec,nosuid,nodev,nouser,size=$DBSize
  47.     chmod 755 $DBPath
  48.     for db in ${DBs[@]}; do
  49.       cd $DBPath
  50.       stat_busy "Restory $db"
  51.       tar xpf ../$db.tar
  52.       if [ $? -gt 0 ];then
  53.         stat_fail
  54.       else
  55.         stat_done
  56.       fi
  57.       cd $OLDPWD
  58.     done
  59.     add_daemon pacmandb
  60.     stat_done
  61.     ;;
  62.   stop)
  63.     stat_busy "Stopping pacmandb"
  64.     for db in ${DBs[@]}; do
  65.       cd $DBPath
  66.       stat_busy "Backup $db"
  67.       tar cpf ../$db.tar $db
  68.       if [ $? -gt 0 ];then
  69.         stat_fail
  70.       else
  71.         stat_done
  72.       fi
  73.       cd $OLDPWD
  74.     done
  75.     umount $DBPath
  76.     rm_daemon pacmandb
  77.     stat_done
  78.     ;;
  79.   restart)
  80.     $0 stop
  81.     $0 start
  82.     ;;
  83.   *)
  84.     echo "usage: $0 {start|stop|restart}"  
  85. esac
  86. exit 0
复制代码

/etc/conf.d/pacmandb.conf
  1. DBs=('local' 'sync')
  2. DBSize=100M
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-21 10:20:27 | 显示全部楼层
不好意思,给大家挖了个坑。。我觉得在不用数据库的情况下,还是想办法把sync放到内存比较好一点吧,安全还能快点。如果可以用数据库,不是非用sqlite的,如果能通过配置来使用哪个数据库最好了,比如系统装有mysql,或者别的,可以通过配置来使用。
回复 支持 反对

使用道具 举报

发表于 2010-12-21 13:08:34 | 显示全部楼层
难道现在的pacman还不够快么?最新版不是已经对速度作优化了么。我这里从来都没有超过1s钟
回复 支持 反对

使用道具 举报

发表于 2010-12-21 17:42:56 | 显示全部楼层
速度的确很慢,每次都要很久才可以搞定。建议sqlite代替
回复 支持 反对

使用道具 举报

发表于 2010-12-21 19:24:13 | 显示全部楼层
我感觉很快……
未作任何“优化”


time pacman -Ss fcitx
extra/fcitx 4.0.1-1 [4.81 MB] [已安装]
    Free Chinese Input Toy of X, a collection of Simplified Chinese input
    methods for Linux

real        0m1.011s
user        0m0.143s
sys        0m0.860s
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表