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

关系型数据库入门的疑问: SQLite 定位是?

  •  
  •   fiveelementgid · 2021-01-23 17:28:47 +08:00 · 6803 次点击
    这是一个创建于 1432 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要是做.NET 开发,是不是没必要过一遍 SQLite,而是直接去从 Mysql/MarianDB 学起

    第 1 条附言  ·  2021-01-25 09:42:08 +08:00
    大概搞懂了
    SQLite 是客户端的一个轻量的数据库,有关系型数据库的基本功能,但是没有高级特性啥的
    MySQL/MariaDB 是 C/S 架构,主要是独立出来一个数据库服务器,进行连接使用
    现阶段决定直接上 MariaDB,完
    第 2 条附言  ·  2021-01-25 10:30:59 +08:00
    EF Core 由 Microsoft 官方支持的 Provider 有 4 种好像
    有 InMemory,SQLite,Azure 和 SQL Server
    只是无意中看到 SQLite 就来问问
    75 条回复    2021-01-27 12:51:25 +08:00
    rbe
        1
    rbe  
       2021-01-23 17:34:32 +08:00
    opengps
        2
    opengps  
       2021-01-23 17:39:09 +08:00
    小而轻,客户端用途较多,比如手机端,比如随着客户端自己保存的数据
    eason1874
        3
    eason1874  
       2021-01-23 17:40:28 +08:00
    SQLite 是文件数据库,不需要服务器,跟 MySQL 不是一个类型。

    区别就是,如果你要使用 MySQL 你得先安装 MySQL 服务,SQLite 就不用。只要能写入文件,你就能弄个 SQLite 数据库,适合脱机。
    matrix67
        4
    matrix67  
       2021-01-23 17:40:57 +08:00
    单机版数据库。

    ps 楼主头像和我是一个人么
    danielmiao
        5
    danielmiao  
       2021-01-23 17:42:47 +08:00
    小项目的临时存储可以用,比自己写文件方便
    Areym
        6
    Areym  
       2021-01-23 17:44:13 +08:00
    .net 的话一般是开发单机桌面程序会用到 SQLite 我至今没用过
    seki
        7
    seki  
       2021-01-23 17:56:48 +08:00
    基本上都是用 DAO 的吧,方法都是封装好的,直接和数据库对话的机会没有这么多,不需要先学?

    @matrix67 不是,这个是公主优衣
    janus77
        8
    janus77  
       2021-01-23 18:01:29 +08:00
    不需要服务器,不用开启连接,直接就可以当纯粹的储存功能用。
    ferock
        9
    ferock  
       2021-01-23 18:03:44 +08:00
    较少并发,较少数据量,需要关系型数据模型

    例如,客户端本地信息存储,微信似乎就是用 SQLite
    jing8956
        10
    jing8956  
       2021-01-23 18:18:08 +08:00
    学.Net 的话数据库不是都从 SQL Server 学起。。。至少我学校里的课程是这样
    但是学 SQLite 也行,做本地客户端数据持久化的话除了直接序列化成二进制 /XML/JSON 保存成以外,
    第二选择也就是这个又小又轻量的 SQL 关系型数据库了
    (听说是真的轻到能运行在低性能 Iot 设备上的
    docs.microsoft.com 很多做本地客户端还有 Entity Framework Core 都能见到 SQLite 的教程了
    justforlook44444
        11
    justforlook44444  
       2021-01-23 20:00:40 +08:00
    轻量级
    xarthur
        12
    xarthur  
       2021-01-23 20:09:44 +08:00 via iPhone
    举个例子,如果你要写个 QQ 机器人用来实现多个群订阅 RSS 功能。这里储存订阅信息就可以用 SQLite,非常轻量,服务端不用装额外的软件,这个服务本身数据量也不大,但是有需要有结构化的数据。
    hoyixi
        13
    hoyixi  
       2021-01-23 20:11:49 +08:00
    例如你要是做 WinForm 之类桌面程序,需要存点复杂的数据,除了 XML 之类,还可以在你程序本地目录下存个 SQLite 小数据库。

    有时候做快速原型开发,本地开发环境直接用个 SQLite, 一些适配代码(比如 ORM )写好,就可以变个配置无缝切换到 MySQL 之类的数据库

    是的,可以不学,学会了 MySQL,这玩意看看就会
    nuistzhou
        14
    nuistzhou  
       2021-01-23 20:29:09 +08:00 via iPhone
    轻量级数据库,上项目一般不会用的吧
    SilenceLL
        15
    SilenceLL  
       2021-01-23 21:33:15 +08:00 via iPhone
    太多了吧,客户端软件很多都是。有道云笔记,onepassword enpass,本地存储结构化数据,基本上都会用到吧
    uptonking
        16
    uptonking  
       2021-01-23 21:39:17 +08:00 via iPhone
    0ZXYDDu796nVCFxq
        17
    0ZXYDDu796nVCFxq  
       2021-01-23 22:23:40 +08:00 via Android
    Sqlite 的应用非常广泛的
    比如 chrome, firefox, 微信
    luchong
        18
    luchong  
       2021-01-23 22:24:03 +08:00
    我也做.NET 的 这个还是得看你使用场景了 你要是做 Web 方向的 肯定就 SQLServer 或者 Mysql 之类的 做客户端的 比如 Winform WPF Xamarin 多少还是要了解一下 SQLite 轻量化的关系型数据库,只依赖几个 dll,实际存储的数据在一个 db 文件里 非常适合 客户端脱机使用 ,我在做呼叫中心调度系统时,就用上了 SQLite,每一个通话记录 或需要临时存储大量结构化数据时 我都会往 SQLite 存一份
    h82258652
        19
    h82258652  
       2021-01-23 22:29:58 +08:00
    非服务型关系型数据库
    反正 sql 把增删改查,join,top x 这些学完就差不多了,也就面试问问。做.net 直接上 ef core,粗暴导航属性快准狠,正式项目除非特别需要性能的地方,不然一律不写 sql
    fox0001
        20
    fox0001  
       2021-01-23 22:42:55 +08:00
    @rbe #1 因为当年 Android App 选择了 SQLite 做数据存储
    Kiriri
        21
    Kiriri  
       2021-01-23 22:49:09 +08:00
    客户端软件一般都会用到吧
    fiveelementgid
        22
    fiveelementgid  
    OP
       2021-01-23 23:10:26 +08:00 via Android
    @rbe
    @opengps
    @eason1874 大概明白了
    @matrix67 就是非 C/S 架构吧
    fiveelementgid
        23
    fiveelementgid  
    OP
       2021-01-23 23:14:49 +08:00 via Android
    @matrix67 不是
    @danielmiao
    @Areym 不做桌面开发,溜了溜了
    fiveelementgid
        24
    fiveelementgid  
    OP
       2021-01-23 23:18:14 +08:00 via Android
    @seki EF Core.......还好吧,只是觉得该学学了
    fiveelementgid
        25
    fiveelementgid  
    OP
       2021-01-23 23:21:50 +08:00 via Android
    @seki EF Core.......还好吧,只是觉得该学学了
    @janus77
    @ferock 那为啥不直接用 json/XML/文件
    fiveelementgid
        26
    fiveelementgid  
    OP
       2021-01-23 23:23:08 +08:00 via Android
    @jing8956 SQL Server 要钱,Express 免费,但是不想整
    fiveelementgid
        27
    fiveelementgid  
    OP
       2021-01-23 23:29:06 +08:00 via Android
    @justforlook44444
    @xarthur
    @hoyixi
    @nuistzhou
    @SilenceLL 就是轻量级,一般只有小工具能用?那我直接上 Mariadb 好了
    fiveelementgid
        28
    fiveelementgid  
    OP
       2021-01-23 23:33:47 +08:00 via Android
    @h82258652 对,我主要是想准备面试(⊙_◎)
    janus77
        29
    janus77  
       2021-01-23 23:44:13 +08:00
    @fiveelementgid #25 同样的问题可以直接用在一切数据库上……这就是数据库(database)和 json/XML/文件的区别了啊, 可以储存更复杂,结构化的数据,支持加密,支持跨平台,性能不错,版本升级,等一切数据库该有的优势。
    fiveelementgid
        30
    fiveelementgid  
    OP
       2021-01-24 00:14:48 +08:00 via Android
    @janus77 也对,保留了数据库的 feature 同时也不会太笨重
    lawler
        31
    lawler  
       2021-01-24 01:39:41 +08:00
    定位是:嵌入式数据库。
    手机端 app,桌面端软件等,服务端一般不需要。因为本身不具备完整数据库特性。单一数据库,单一线程,单一读写访问,不支持大数据,性能差强人意,但会看到同一个应用有非常多的 xx.db 文件来间提高性能,常见的,如几乎所有 Androidapp 都在使用,部分 iOSapp 在使用,及桌面端 qq 微信旺旺 chrome 等。几乎都是 sqlite 数据库。

    不学的话,没什么大问题。缺少一种嵌入式解决方案而已。
    no1xsyzy
        32
    no1xsyzy  
       2021-01-24 02:12:14 +08:00
    跑一些(介于单元测试和集成测试之间的)测试时用(虽然这种情况称呼为单元测试也没人反对),反正大部分 ORM 会解决不同 SQL 方言的问题
    权限要求极低,只需要能执行代码能访问文件就能运行

    另一方面,你要记得一些弊端:
    并发低(因为依赖文件的读写锁,跨线程等于全库加锁)
    跨机器难(包括数据库单独机器和多服务器
    无法缓存优化后的 SQL (未确认
    40EaE5uJO3Xt1VVa
        33
    40EaE5uJO3Xt1VVa  
       2021-01-24 08:55:01 +08:00
    学,sqlite 再单机上应用很广
    bthulu
        34
    bthulu  
       2021-01-24 09:30:59 +08:00   ❤️ 1
    @lawler 性能超强的好吧, 单机单线程甩 mysql 和 oracle 一条街
    codehz
        35
    codehz  
       2021-01-24 10:15:05 +08:00 via Android
    SQLite3 存大量数据根本不是问题,唯一的问题是只能单机用,所以只要没有水平扩展的需求,基本都能用 SQLite3 解决。。。
    star7th
        36
    star7th  
       2021-01-24 10:16:28 +08:00
    个人觉得 sqlite 是不需要专门花时间学的。如果会 mysql,学习了 sql 语法,基本上能举一反三大部分关系型数据库
    tanghongkai
        37
    tanghongkai  
       2021-01-24 10:58:10 +08:00 via Android
    本地的小数据库用这个比较方便,比如 temphis.db
    lancelock
        38
    lancelock  
       2021-01-24 11:12:37 +08:00 via iPhone
    你以为 sqlite 是 mysql 之类的前置条件吗?并不是,他们之间并没有依赖关系
    tairan2006
        39
    tairan2006  
       2021-01-24 13:34:52 +08:00
    客户端用的数据库
    QBugHunter
        40
    QBugHunter  
       2021-01-24 14:19:28 +08:00
    SQLITE3 很好很强大,最大的优点就是不用部署,直接编译进程序里。
    fiveelementgid
        41
    fiveelementgid  
    OP
       2021-01-24 14:35:40 +08:00 via Android
    @lawler 好,没这个需求,不管了。基本的 json 还是会的
    @no1xsyzy
    @yanzhiling2001 不学单机应用......
    @QBugHunter 这是因为他是 C 的一个库?
    jing8956
        42
    jing8956  
       2021-01-24 16:21:04 +08:00
    @fiveelementgid 你说的这两个都是商用授权
    怕不是不知道有全功能免费版只许可在非生产环境下用作开发和测试的 Developer 版就在官网上往下拉一屏幕的左边
    但我前公司才不管这些,Developer 版直接放生产
    fiveelementgid
        43
    fiveelementgid  
    OP
       2021-01-24 16:56:49 +08:00 via Android
    @jing8956 看到有 developer 版本的,还有一个免费的 Express 轻量版本的
    .......还是用 Mariadb 好了
    Hxu2M811KVSJqN75
        44
    Hxu2M811KVSJqN75  
       2021-01-24 17:15:56 +08:00
    @codehz 大概支持多少数据,想在单机上用,1000 万行数据支持够么?
    codehz
        45
    codehz  
       2021-01-24 17:50:01 +08:00 via Android
    @lchy ( PC 单机限定的话完全可以用,反正别的选项不会比这个更好,这里说的是能用,如果你数据库有几十个 T 的话,不要指望能实现快速查询)
    ruyu
        46
    ruyu  
       2021-01-24 18:39:14 +08:00
    SQLite 真的是太棒了!
    40EaE5uJO3Xt1VVa
        47
    40EaE5uJO3Xt1VVa  
       2021-01-24 18:48:40 +08:00
    别说不学单机应用,你迟早会用到的
    hotsymbol
        48
    hotsymbol  
       2021-01-24 21:04:35 +08:00
    .Net 开发??? 现在还有人用这个东西吗? 再说.Net 开发难道不是应该从 SQL Server 开始用吗 ?如此古老的语言怎么配得上 MariaDB 和 MySQL
    feelapi
        49
    feelapi  
       2021-01-24 21:28:39 +08:00
    sqlite 可以玩出很多花样的,比如这个:
    https://www.sqlite.org/sessionintro.html
    In other words, the session extension provides a facility for SQLite database files that is similar to the unix patch utility program, or to the "merge" capabilities of version control systems such as Fossil, Git, or Mercurial.

    你可以把一个大的数据库,保存为一系列的 changeset,需要的时候合并成为可用的 sqlite 数据库。这些 changeset,可以放在 aws s3 这种对象存储中。
    no1xsyzy
        50
    no1xsyzy  
       2021-01-24 21:33:24 +08:00
    @fiveelementgid 你说的单机是指?为了方便定义,我来问下你的反义
    是指只用分布式系统:那可能存在每个微服务需要自带一个缓存的情况(虽然通常用程序语言数据结构比较方便)。
    是指只使用 B/S 架构:那还行
    存在 C/S 架构:客户端可能为了效率需要一个本地存储 / 缓存。

    不过总体而言,没必要特地去学,我估计你现在需要的是 SQL 的基础知识而不是 SQL 某一特定实现的情况。
    那样的话,SQLite 和其他一样都是一个选择而已。
    如果会 SQL 了,等要用了再学也不迟,反正不难。

    另一方面其实是单文件 NoSQL 目前没有能打的(
    VTEX9527
        51
    VTEX9527  
       2021-01-24 22:04:31 +08:00
    单机内嵌?
    systemcall
        52
    systemcall  
       2021-01-24 23:04:35 +08:00
    连单片机都能跑。C/S 架构和单机软件用来存数据,省事
    Chromium 的历史记录就是放在 SQLite 里面。SQLite 再怎么说也是一个数据库吧,而且单个应用用的时候性能不算差,如果配置很低的话反而非常有优势
    zeroDev
        53
    zeroDev  
       2021-01-24 23:09:09 +08:00 via Android
    sqlite 开发友好
    tanranran
        54
    tanranran  
       2021-01-24 23:12:06 +08:00
    @lchy #44 1 亿都可以的
    KallyDev
        55
    KallyDev  
       2021-01-24 23:23:43 +08:00 via iPhone
    @lchy 储存过近十亿行数据,加完索引后性能依旧可观。
    fiveelementgid
        56
    fiveelementgid  
    OP
       2021-01-25 00:35:10 +08:00 via Android
    @yanzhiling2001 别骂了别骂了( ;∀;)日后有需求再说
    fiveelementgid
        57
    fiveelementgid  
    OP
       2021-01-25 00:37:18 +08:00 via Android
    @hotsymbol 还有啥配不配的吗....都是 Relative 数据库,没啥大区别
    (。ŏ﹏ŏ)我怀疑你在钓鱼
    fiveelementgid
        58
    fiveelementgid  
    OP
       2021-01-25 00:38:47 +08:00 via Android
    @no1xsyzy SQL 基础还是会的( ;∀;),就一个选型的问题
    shuax
        59
    shuax  
       2021-01-25 08:53:16 +08:00
    这个叫做嵌入式数据库
    RickyC
        60
    RickyC  
       2021-01-25 09:16:13 +08:00
    不用部署就可以运行.
    就像当年 Classic ASP 时代的 mdb 文件
    bsg1992
        61
    bsg1992  
       2021-01-25 09:29:42 +08:00
    @hotsymbol 你这个 der 天天跑出来喷 dotnet, 有劲嘛
    daysv
        62
    daysv  
       2021-01-25 09:33:59 +08:00
    sqlite 的性能还挺不错的, 你可以理解为客户端的数据库。
    fiveelementgid
        63
    fiveelementgid  
    OP
       2021-01-25 09:39:40 +08:00 via Android
    @bsg1992 原来这个人就是那个著名的 C#黑啊,我 block 了,谢谢提醒
    mostkia
        64
    mostkia  
       2021-01-25 10:00:11 +08:00
    开箱即用(无需配置),学习成本低(会 sql 就能用),运用广泛(几乎所有开发环境都支持),这就足够了
    wolfan
        65
    wolfan  
       2021-01-25 10:01:38 +08:00
    别的咱不晓得,SQLite 最早是给导弹写的……
    smallpython
        66
    smallpython  
       2021-01-25 10:05:55 +08:00
    磁盘 io 肯定比网络 io 快多了
    chouchoui
        67
    chouchoui  
       2021-01-25 10:18:39 +08:00
    @bsg1992 谢谢提醒,先 B 了再说

    @fiveelementgid .NET 的话还是用 SQL Server 最佳组合,无脑 EF Core,转换到 SQLite/MySQL/MariaDB 去给 EF Core 换一个 Provider 就行了,不过可能存在一些细微的兼容性问题
    vone
        68
    vone  
       2021-01-25 10:20:39 +08:00
    @bsg1992,这个 @hotsymbol 一看就是个粉转黑,被巨硬坑惨的老哥。
    fiveelementgid
        69
    fiveelementgid  
    OP
       2021-01-25 10:29:00 +08:00 via Android
    @mostkia
    @smallpython 这个肯定,但是不支持 Async
    @chouchoui SQL Server 收费,用的 MariaDB,兼容性其实没啥问题。
    zzzmh
        70
    zzzmh  
       2021-01-25 10:50:20 +08:00
    我接触到的是 java 的桌面程序,可以在用户本地存一些数据,javafx + sqllite 3 个系统都能支持
    leekafai
        71
    leekafai  
       2021-01-25 11:32:36 +08:00
    嵌入式
    shyling
        72
    shyling  
       2021-01-25 11:42:01 +08:00
    最大的区别是 mysql/pg 是 cs 模式的,sqlite 是 embed
    circleee
        73
    circleee  
       2021-01-25 14:22:12 +08:00
    @matrix67 咱俩头像是一个
    hotsymbol
        74
    hotsymbol  
       2021-01-26 00:44:24 +08:00
    @vone 这都被你看出来了。曾经我是个忠实的.Net Core 开发。曾几何时。C# 那些领先的优势全都没有了。Azure 还贵得出奇
    @bsg1992 哎。现在的年轻人。你好好去读一下 CSharp Proposal 吧朋友,明显是全面领先到全面被超越的历史
    matrix67
        75
    matrix67  
       2021-01-27 12:51:25 +08:00
    @circleee #73 哈哈哈 好朋友!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5406 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 08:56 · PVG 16:56 · LAX 00:56 · JFK 03:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.