请教一下关于 PHP SQLite3 的几个问题

2015-09-03 06:30:59 +08:00
 CNCCTV

想用 SQLite3 来做保存访问日志,但是有些问题如下:

根据这个( http://www.php.net/manual/zh/sqlite3.open.php )官方的说明是提供设置数据库密码的,但是在实际测试中发现,

class MyDB extends SQLite3
{
    function __construct ()
    {
        $this->open ('mysqlitedb.db', SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE , '123456789');
    }
}

数据库根本就没有被设置密码,请问怎么才能设置数据库密码?

如果要改数据库密码,怎么去修改?

最后一个问题是,看介绍说 SQLite3 支持多线程的,但是只能一个线程写入数据库,这应该怎么做才能在大量数据要写入的情况下,怎么才可以高效快速完成呢?

3745 次点击
所在节点    PHP
21 条回复
cxbig
2015-09-03 06:36:42 +08:00
SQLite3 这种轻量级的 DB 要啥安全配置。。。
要是讲究安全性请考虑 MySQL 、 MariaDB 、 PostgreSQL
abelyao
2015-09-03 07:55:47 +08:00
大量数据写入的真心不要选择 SQLite 啊啊啊…
unity0703
2015-09-03 11:55:32 +08:00
免费版 SQLite 不支持加密,你可以自己对整个数据库文件加密,读的时候再自己解密
mathgl
2015-09-03 11:59:26 +08:00
sqlite3 不需要密码。

如果是高并发写入,不要用 sqlite3
CNCCTV
2015-09-03 14:27:05 +08:00
@mathgl 那用什么来做好呢?日志记录,是长期记录的,主要是用来做统计数据用的,时间长了,内容量就相当大了,不可能用 MySQL 来做吧?
neoblackcap
2015-09-03 14:30:11 +08:00
@CNCCTV 日志按道理不是上专门的日志服务器就好了吗?我们正在使用 logentries 的日志服务,感觉不错,而且还提供了 S3 的自动存档服务
mathgl
2015-09-03 14:32:20 +08:00
@CNCCTV

http://www.sqlite.org/whentouse.html

看看你的应用场景是否符合上述的情况,如果是,就可以用,如果不是,未必是最合理的使用。
zhuangzhuang1988
2015-09-03 15:01:10 +08:00
第一个:
官方说明了 "If the build includes encryption, then it will attempt to use the key.", (PHP 5 >= 5.3.0 )
看看是不是不符合.
第二个:
换掉 sqlite3.
master
2015-09-03 15:09:42 +08:00
记录日志这样的高并发写行为, I/O 操作本身要尽可能简单才是。
轻的日志基于文本,重的基于日志服务器。

如果说担心文件体量问题,认为 mysql 不合适,那 sqlite 就更不合适了,
sqlite 还加密,那完全就是本末倒置了。
realpg
2015-09-03 17:59:14 +08:00
MYSQL 都不合适 SQLITE 能合适……
CNCCTV
2015-09-03 18:42:53 +08:00
@zhuangzhuang1988 我的 php 是 5.6.9,怎么换掉 sqlite3 ?
CNCCTV
2015-09-03 18:44:39 +08:00
@master 原来我是用 json 做的。
Khlieb
2015-09-04 01:19:21 +08:00
@cxbig @abelyao @master SQLite 用在普通的的应用程序或者简单的 Web app 开发上倒是可行的
abelyao
2015-09-04 01:32:52 +08:00
@Khlieb 没人说不行吧?问题是楼主要用于日志记录,而且是大数据量的写入,而且还要安全性
CNCCTV
2015-09-04 01:40:13 +08:00
@abelyao 不是所有日志都写在一个 db 的,是分类和按日期的单独的 db ,至于什么要用密码,是因为不希望被别人可以随便查看。
abelyao
2015-09-04 01:41:56 +08:00
@CNCCTV 理解你的需求,只是 SQLite 做这事真的不合适。
CNCCTV
2015-09-04 01:45:09 +08:00
@abelyao 除了 json 和文件(不考虑日志服务器),没有更好的方式了吗?
abelyao
2015-09-04 01:54:26 +08:00
@CNCCTV

日志的记录,除了时刻的记录之外,还需要考虑索引、日后查看等功能,如果你单独按照日期去划分,那如果我想看某个时间段内、 IP 地址为 XXX 的访问记录,多文件的日志、或者 JSON 格式,检索性能能否满足你?

相对的,日志这东西需要你切合实际的访问量、写入量、查看频率、对查看的效率要求,来选一种最合适的,如果你说你每天写入几千条记录,但检索频率高,我不认为文件存储会是一个好办法;如果你说每天写入 100W 条记录、几个月才检索一次,那显然放数据库的话、数据库压力也大。

当你写入量也达到高要求了、检索也达到高需求了,就乖乖考虑日志服务器吧,或者专门的第三方日志服务。说白了,根据实际需求决定,脱离实际的“伪需求”都只是空谈。
ljbha007
2015-09-04 08:43:57 +08:00
@CNCCTV 换 mysql 都比 sqlite 适合干这事啊
ljbha007
2015-09-04 08:47:17 +08:00
@CNCCTV sqlite 也有加密的第三方库 但是一个是商用要收费 一个是会增加 CPU 负担

https://www.zetetic.net/sqlcipher/
https://www.sqlite.org/see/doc/trunk/www/index.wiki

其中 sqlicipher 有 php 支持 微信就是用的这个的 C++版本
https://www.zetetic.net/sqlcipher/documentation/

see 没用过不知道

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/218000

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX