V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CNCCTV
V2EX  ›  PHP

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

  •  
  •   CNCCTV · 2015-09-03 06:30:59 +08:00 · 3709 次点击
    这是一个创建于 3372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想用 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 支持多线程的,但是只能一个线程写入数据库,这应该怎么做才能在大量数据要写入的情况下,怎么才可以高效快速完成呢?

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

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

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

    看看你的应用场景是否符合上述的情况,如果是,就可以用,如果不是,未必是最合理的使用。
    zhuangzhuang1988
        8
    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
        9
    master  
       2015-09-03 15:09:42 +08:00
    记录日志这样的高并发写行为, I/O 操作本身要尽可能简单才是。
    轻的日志基于文本,重的基于日志服务器。

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

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

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

    当你写入量也达到高要求了、检索也达到高需求了,就乖乖考虑日志服务器吧,或者专门的第三方日志服务。说白了,根据实际需求决定,脱离实际的“伪需求”都只是空谈。
    ljbha007
        19
    ljbha007  
       2015-09-04 08:43:57 +08:00
    @CNCCTV 换 mysql 都比 sqlite 适合干这事啊
    ljbha007
        20
    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 没用过不知道
    CNCCTV
        21
    CNCCTV  
    OP
       2015-09-04 19:39:26 +08:00
    @ljbha007 我去 sqlite 官方网下了源码,请问一下怎么自己写加密模块?
    还有,我能不能修改多线程模式,允许所有线程插入新数据?(因为是日志,就不考虑是否重复内容了。)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1633 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:59 · PVG 00:59 · LAX 08:59 · JFK 11:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.