• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX  ›  程序员

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

  •  2
     
  •   tctc4869 · Jul 16, 2020 · 4811 views
    This topic created in 2302 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    存储过程? 直接写就好了

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

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

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

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

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

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

    当然这种用途,我并不是用于服务端,
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5280 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 525ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    ♥ Do have faith in what you're doing.