V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX  ›  程序员

除了 sqlite 和 sqlserver,还有哪些数据库支持通过以文件路径访问的数据库?

  •  2
     
  •   tctc4869 · 2020-07-16 09:20:27 +08:00 · 3591 次点击
    这是一个创建于 1616 天前的主题,其中的信息可能已经有所发展或是发生改变。

    sqlite 和 sqlserver,都是单一文件的数据库( sql server 的数据文件只包括 mdf ),可以把数据库文件移动到任何地方,并且都支持通过文件路径访问。而不是通过数据库的服务的实例名称来读取。

    但是 sqlite 没有存储过程,而 sql server express 版最大支持 10G,非 express 版要钱。

    那么有其他类似功能的数据库么,支持存储过程,支持移动数据文件到任何一个位置,支持通过文件路径( java,c#)去访问数据库内容。

    第 1 条附言  ·  2020-07-16 17:00:30 +08:00
    不一定要嵌入式数据库,只要是数据库的数据集实例是作为单个文件,或者数据库实例是一个方法数据库实例相关文件夹(其中包括数据文件日志文件等杂项,比如 SqlServer ),数据库实例的文件资源可以被移动到任意文件夹任然可以再被数据库服务关联进行使用,可以编写程序以本地路径的方式读取数据库内容,是不是嵌入式还是服务端都没关系,只要编程语言支持以本地路径读取就可以。比如 sql server 的 mdf 文件支持以本地路径的方式读取(需要开启 sql server 服务),

    考虑 sql 数据库,而 sqlite 的问题是不支持存储过程。虽然这只是一个小问题。
    第 2 条附言  ·  2020-07-16 17:04:40 +08:00
    上面有些话写错了“只要是数据库的数据集实例是作为单个文件,或者数据库实例是一个方法数据库实例相关文件夹”改为“只要是一个数据库实例是作为单个文件,或者数据库实例牵扯文件不止一个,但数据库实例牵扯的文件是可以被整合到一个文件夹内”
    32 条回复    2020-12-21 09:51:34 +08:00
    wackyjazz1
        1
    wackyjazz1  
       2020-07-16 09:29:39 +08:00
    firebird
    tctc4869
        2
    tctc4869  
    OP
       2020-07-16 09:33:28 +08:00
    @wackyjazz1 它有比较好用的可视化软件么?
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       2020-07-16 09:34:43 +08:00 via Android
    h2
    Ritter
        4
    Ritter  
       2020-07-16 09:35:58 +08:00
    access
    codehz
        5
    codehz  
       2020-07-16 09:36:22 +08:00 via Android
    其实可以给 sqlite3 打补丁支持存储过程的。。。
    不过作为一个单一文件的数据库,存储过程存在的意义不是很大
    tctc4869
        6
    tctc4869  
    OP
       2020-07-16 09:37:04 +08:00
    @codehz 什么补丁啊
    tctc4869
        7
    tctc4869  
    OP
       2020-07-16 09:38:55 +08:00
    @Ritter 这个只支持 WIndows 吧;
    wackyjazz1
        8
    wackyjazz1  
       2020-07-16 09:39:15 +08:00
    @tctc4869 dbeaver
    thtznet
        9
    thtznet  
       2020-07-16 09:39:47 +08:00
    json
    codehz
        10
    codehz  
       2020-07-16 10:35:50 +08:00
    @tctc4869 #6
    知名的可能是这个 https://www.gaia-gis.it/fossil/libspatialite/wiki?name=Stored+Procedures
    但是这个功能太多了,而且也语法上不太好看,如果你觉得合适的话可以自己裁剪一下,只保留存储过程类似的功能
    https://sqlite.org/forum/forumpost/a45b0b6676 这个帖子里有很多补丁,但是基本都过时了
    RadishWind
        11
    RadishWind  
       2020-07-16 10:38:26 +08:00
    accsess 、leveldb,或者用 mysql 然后迁移的时候写个脚本去迁移 myd myi 文件
    sss495088732
        12
    sss495088732  
       2020-07-16 10:50:13 +08:00
    rocksdb
    min
        13
    min  
       2020-07-16 11:32:17 +08:00
    qile1
        14
    qile1  
       2020-07-16 11:48:28 +08:00 via Android
    sysbase 好使怎么拼写的那个数据库也支持吧
    exip
        15
    exip  
       2020-07-16 12:14:20 +08:00 via Android
    vfp 的 dbf 能直接访问到数据表
    Nich0la5
        16
    Nich0la5  
       2020-07-16 12:24:17 +08:00 via Android
    hsql
    roundgis
        17
    roundgis  
       2020-07-16 12:26:44 +08:00
    sqlite 的调用就是 function calls

    存储过程? 直接写就好了

    传统的数据库是 c/s 架构,为了避免通信开销,才搞出存储过程

    sqlite 没有这个问题
    abcbuzhiming
        18
    abcbuzhiming  
       2020-07-16 14:45:39 +08:00
    @roundgis sqlite 有没有什么办法解决只允许单线程读写的问题?我希望在低负载场合换掉 mysql,但是这种场合有多个程序的时候 sqlite 就不适用了
    roundgis
        19
    roundgis  
       2020-07-16 16:23:19 +08:00
    @abcbuzhiming 试下 WAL mode
    GM
        20
    GM  
       2020-07-16 16:27:35 +08:00
    很多,不过要看你是什么语言。
    比如 LiteDB 、Realm
    wangxiaoaer
        21
    wangxiaoaer  
       2020-07-16 16:37:31 +08:00
    借楼问一下,有么有文件数据库可以支持集群访问?

    比如把数据库依赖的文件放到 NAS 中,集群的多个实例都访问这个数据库。

    H2 好像不支持这么干,一个实例(进程)连接之后,其他进程就不能连接了。
    tctc4869
        22
    tctc4869  
    OP
       2020-07-16 16:53:41 +08:00
    @GM 优先考虑 ava 和 c#,其次考虑 c++,node.js 吧( electron ),

    不一定要嵌入式数据库,只要是数据库实例是作为文件,或者数据库实例是一个方法数据库实例相关文件夹(其中包括数据文件日志文件等杂项,比如 SqlServer ),可以被程序以本地路径的方式读取,是不是嵌入式还是服务端,都没关系,只要编程语言支持以本地路径读取就可以,
    MeteorCat
        23
    MeteorCat  
       2020-07-16 17:05:06 +08:00 via Android
    json + 1,文本化数据库,直接 dbname.json
    wiix
        24
    wiix  
       2020-07-16 17:07:03 +08:00
    @wangxiaoaer h2 支持 Embedded 、Server 、Mixed 三种连接模式,你说的是 Embedded 模式。
    tctc4869
        25
    tctc4869  
    OP
       2020-07-16 17:07:22 +08:00
    @tctc4869 说错了,“或者数据库实例是一个方法数据库实例相关文件夹”改为“数据库实例牵扯文件不止一个,但数据库实例牵扯的文件是可以被整合到一个文件夹内”
    wangxiaoaer
        26
    wangxiaoaer  
       2020-07-16 17:10:49 +08:00
    @wiix #24 我希望 Embedded 模式支持多实例,但是它不支持。
    tctc4869
        27
    tctc4869  
    OP
       2020-07-16 17:11:51 +08:00
    @wiixh2 h2 支持存储过程么,并发怎么用(与 sqlite 相比)
    wiix
        28
    wiix  
       2020-07-16 18:04:55 +08:00
    @wangxiaoaer 可以关掉文件锁。但只能一个链接进行写操作,否则数据库会损坏。

    @tctc4869 应该是支持的,不用存储过程没去了解。
    有 Server 模式,可以用 TCP/IP 访问
    jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
    但需要用 java -jar h2.jar 这种方式启动一个 h2 服务;
    或者先用一个应用以 Mixed 启动,然后其他应用就可以用 TCP/IP 访问了
    tctc4869
        29
    tctc4869  
    OP
       2020-07-17 08:29:09 +08:00
    @wackyjazz1 请问要怎么在 Windows 中启动 firebird ? dbeaver 无法像 sqlite 那样直接创建 firebird 的 db 文件,需要安装什么么?
    Firebird-3.0.6.33328_0_x64.exe 安装这个么?然后要怎么创建一个 firebird 的 db 文件?
    wackyjazz1
        30
    wackyjazz1  
       2020-07-20 11:21:13 +08:00
    @tctc4869 https://firebirdsql.org/manual/qsg10-creating.html 安裝完後可以使用命令行創建,很簡單的
    tctc4869
        31
    tctc4869  
    OP
       2020-12-21 09:48:54 +08:00
    @codehz 存储过程的用处,可以少写很多东西
    tctc4869
        32
    tctc4869  
    OP
       2020-12-21 09:51:34 +08:00
    @codehz 假设我用两个不同的编程语言开发读写数据库的程序,要写重复的代码,但是有了存储过程,我可以少写很多代码,节省开发时间。

    当然这种用途,我并不是用于服务端,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2613 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:39 · PVG 23:39 · LAX 07:39 · JFK 10:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.