shenyixin99
狐狸大王
狐狸大王
  • UID30127
  • 注册日期2009-08-19
  • 最后登录2011-11-20
  • 发帖数318
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:7747回复:10

将places.sqlite的减肥进行到底,还firefox一个苗条的身材!!!

楼主#
更多 发布于:2009-09-04 00:16
Firefox把访问每一个网站的历史数据登记在个人Profile目录下的 places.sqlite 文件中。随着访问的网站越来越多,places.sqlite 记录的数据也会越来越多,根据程度不同,这个文件的大小也因人而异,有的人几M大,有的人几十M,有的人甚至几百M大。

places.sqlite记录数据是不分青红皂白的,经常访问的、不经常访问的,重要的、不重要的、一箩筐通通都记录下来,所以有时候会增长得特别胖。而Firefox经常要访问到places.sqlite里面的数据,若places.sqlite太胖,必然拖垮firefox各方面的速度,所以很有必要删除places.sqlite里面一些“不重要”的信息,还firefox一个苗条的身材,让firefox跑得更轻松。。。

--将浏览次数小于等于2次的记录删除:
DELETE FROM moz_historyvisits WHERE place_id IN (SELECT id FROM moz_places WHERE visit_count <=2 );
DELETE FROM moz_places WHERE (visit_count <=2 AND hidden <> 1 AND id NOT IN (SELECT place_id FROM moz_annos UNION SELECT fk FROM moz_bookmarks));


--删除最近30天没有访问的网站纪录
 delete   from moz_places where   id in ( 
    select place_id from (  
       select place_id,max(visit_date) as mdate   
         from moz_historyvisits group by place_id  
    ) as c where   
    c.mdate < strftime('%s',datetime('now','-30 days'))*1000000  
 );  

--经过上面的操作,数据库表有些外键对应不到另外表的主键,所以删除对应不到的记录,也就是整理数据库,让各表的数据关系恢复正常。
DELETE FROM moz_inputhistory WHERE place_id NOT IN (SELECT id FROM moz_places);
DELETE FROM moz_favicons WHERE id NOT IN (SELECT favicon_id FROM moz_places);
delete    from moz_historyvisits where   place_id not in (select id from moz_places)  ;  
update moz_places set visit_count=(select count(*)   from moz_historyvisits   where moz_historyvisits.place_id = moz_places.id);  

--压缩数据库
VACUUM;


上面的脚本是从网上集合而来,再经整理而成的,至少可以让places.sqlite大小变成原来的1/5。

本人对SQL很熟悉,但不了解places.sqlite这个数据库的设计思想,请教一下各位:

1、怎么编写脚本将30天之前的所有历史记录删除掉,不删除书签。
2、places.sqlite这个数据库里面表的各个字段的含义,以及表与表,属性与属性之间的关系是怎样的???哪里有相关的资料介绍。。。
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
1楼#
发布于:2009-09-04 00:16
places的有关资料可以到MDC去看看:
https://developer.mozilla.org/en/Places
Firefox More than meets your experience
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
2楼#
发布于:2009-09-04 00:16
最近冒出来那么多清理sql的扩展,看看源代码估计能知一二。
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
shenyixin99
狐狸大王
狐狸大王
  • UID30127
  • 注册日期2009-08-19
  • 最后登录2011-11-20
  • 发帖数318
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2009-09-04 00:16
kmc:最近冒出来那么多清理sql的扩展,看看源代码估计能知一二。回到原帖


嘻嘻,名字是什么。。。除了VacuumPlaces   Extension

在Vacuum之前,一定要做好备份,俺忘记备份了,伤心。。。。。
fiag
管理员
管理员
  • UID1188
  • 注册日期2004-12-21
  • 最后登录2024-04-22
  • 发帖数4681
  • 经验686枚
  • 威望0点
  • 贡献值402点
  • 好评度51点
4楼#
发布于:2009-09-04 00:16
VacuumPlaces Extension 有毛病吧!
shenyixin99
狐狸大王
狐狸大王
  • UID30127
  • 注册日期2009-08-19
  • 最后登录2011-11-20
  • 发帖数318
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
5楼#
发布于:2009-09-04 00:16
moz_places 表中的hidden字段和type字段分别指的是什么???
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
6楼#
发布于:2009-09-04 00:16
>用它来压缩places.sqlite之后,places.sqlite整个数据库结构都变了,以后再也不能用SQLite Manager

估计是用了什么不兼容的压缩/优化方式?好在Firefox能打开就行。这对我来说无所谓,我要的只是快,而这样压缩了,确实是快。书签嘛,全部有Xmarks管着

你可以试试另一个改进版Vacuum Places Improved 1 ,它的下载量远远大过Vacuum Places
https://addons.mozilla.org/en-US/firefox/addon/13878
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
shenyixin99
狐狸大王
狐狸大王
  • UID30127
  • 注册日期2009-08-19
  • 最后登录2011-11-20
  • 发帖数318
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
7楼#
发布于:2009-09-04 00:16
通过查看源代码知道:Vacuum Places Improved 1 和Vacuum Places Extension最本质的原理都一样,只对places.sqlite执行了一条SQL语句,那就是:vacuum。。。如此简单而已。。。。

反而PlacesCleaner不仅执行了vacuum,还多了一条将浏览次数少于N的记录删除。所以综合看来,PlacesCleaner功能相对多一点,但是事实确恰恰相反,功能最好的下载量反而最少,功能最弱的下载量却最大。。。。不知道为什么会是这样!!!
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
8楼#
发布于:2009-09-04 00:16
这是Improved 1的作者在Vaccum那里的留言,说明他改进了哪些。

I've taken inspiration from you add-on and worked out the rougher edges, rewriting it in object-oriented code, adding support for localization, auto-cleaning and icon auto-hiding.


JavaScript也有面向对象?
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
shenyixin99
狐狸大王
狐狸大王
  • UID30127
  • 注册日期2009-08-19
  • 最后登录2011-11-20
  • 发帖数318
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
9楼#
发布于:2009-09-04 00:16
kmc:这是Improved 1的作者在Vaccum那里的留言,说明他改进了哪些。



JavaScript也有面向对象?
回到原帖



JavaScript有面向对象的,Vaccum的作者写的JS脚本全部是函数,没有采用类对象进行封装,所以开发扩展的人用起来和维护起来都不太方便,而Improved 1的作者将Vaccum的作者写的JS脚本里面的函数封闭在var VacuumPlacesImproved = {}里面,如此而已。

呵呵,我知道为什么功能多的下载量反而少了,因为首先他们是参照前面的作者写的,然后添加一些小的功能而已;其次,它们的发布时间比原创作者要晚得多。。。
shenyixin99
狐狸大王
狐狸大王
  • UID30127
  • 注册日期2009-08-19
  • 最后登录2011-11-20
  • 发帖数318
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2009-09-04 00:16
Components.classes["@mozilla.org/browser/nav-history-service;1"]
                      .getService(Components.interfaces.nsPIPlacesDatabase)
                      .DBConnection.executeSimpleSQL("VACUUM");


说到底,Vacuum Places Improved 1 和Vacuum Places Extension,都只执行了这一条语句对数据库进碎片压缩。
游客

返回顶部