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

做个小调查, iOS 开发本地持久化数据你是喜欢用 CoreData 还是直接 sqlite

  •  1
     
  •   ldehai ·
    ldehai · 2015-09-01 11:14:31 +08:00 · 7718 次点击
    这是一个创建于 3375 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2015-09-01 20:30:11 +08:00
    汇总一下各位的回复:
    用的最多的还是 FMDB ;有部分兄弟已经采用或正准备采用 realm 。

    FMDB is a Cocoa / Objective-C wrapper around SQLite ( https://github.com/ccgus/fmdb )
    Realm is not an ORM on top of SQLite. Instead it uses its own persistence engine, built for simplicity (& speed )( https://realm.io/).
    35 条回复    2016-10-25 20:29:43 +08:00
    huanglexus
        1
    huanglexus  
       2015-09-01 11:18:23 +08:00   ❤️ 1
    键值存储的 sqlite
    hilenlai
        2
    hilenlai  
       2015-09-01 11:18:46 +08:00   ❤️ 1
    喜欢用 FMDB 或 LevelDB
    ibremn
        3
    ibremn  
       2015-09-01 11:24:09 +08:00   ❤️ 1
    FMDB , LevelDB , Realm 。
    苹果在最新的 News.app 里都用的是 FMDB 这该怎么说好呢。。
    ldehai
        4
    ldehai  
    OP
       2015-09-01 11:24:52 +08:00
    @hilenlai @ibremn 我也是用 FMDB ,一个是要写 sql ,一个是 ORM 。但是写 sql 感觉好烦,好多表跟后台数据库差不多,总觉得在做重复的工作。
    rannie
        5
    rannie  
       2015-09-01 11:26:26 +08:00   ❤️ 1
    如果再做的话, FMDB 吧,感觉 CoreData 有些问题还是挺烦人的。。
    hilenlai
        6
    hilenlai  
       2015-09-01 11:34:52 +08:00   ❤️ 1
    @ldehai 用 FMDB 的把 JSON 存字符串,取出来就相当于 JSON 字符串了,再进行解析撒。之前也试过写 ORM ,太复杂了。 不过还是看业务把,怎么方便怎么来
    blacklee
        7
    blacklee  
       2015-09-01 11:38:37 +08:00   ❤️ 1
    用过一次 CoreData ,在上线之前遇到完全无法解决的问题,然后又把整个数据存储模块全部用 FMDB 重写了。
    但是看一些大厂用的还是 CoreData ,还是自己的功力不够,驾驭不了。而不是 CoreData 不好。
    ldehai
        8
    ldehai  
    OP
       2015-09-01 11:53:45 +08:00
    @hilenlai 这个方法不错,省得客户端的数据库太复杂,表操作的代码(插入、更新、查询)就要写一堆。
    不过有些数据要在客户端做统计,感觉还是用 sql 方便。所有比较纠结,没有最完美的方案。
    SeanGeek
        9
    SeanGeek  
       2015-09-01 12:52:14 +08:00   ❤️ 1
    FMDB
    ldp940622
        10
    ldp940622  
       2015-09-01 13:32:30 +08:00   ❤️ 1
    给公司做的项目用的 CoreData,之后我再也不想用它了,可能是我功力还不够..
    hyzjshwo
        11
    hyzjshwo  
       2015-09-01 13:55:02 +08:00   ❤️ 1
    从 CoreData 迁移到 Sqlite 了,用的 wrapper 是 FMDB 。 CoreData 坑多,但也许我没吃透,问题都能解决只是还是 Sqlite 来的直接。
    JohnShaw
        12
    JohnShaw  
       2015-09-01 14:26:05 +08:00   ❤️ 1
    FMDB , CoreData 根本不好用,个人在玩 Realm 。
    lawder
        13
    lawder  
       2015-09-01 14:59:57 +08:00   ❤️ 1
    刚接触 Realm ,感觉还不错,以后会试试它。
    chisj
        14
    chisj  
       2015-09-01 15:16:33 +08:00   ❤️ 1
    TMCache 。
    zenghaojim33
        15
    zenghaojim33  
       2015-09-01 15:20:58 +08:00   ❤️ 1
    Realm
    ldehai
        16
    ldehai  
    OP
       2015-09-01 15:34:34 +08:00
    @JohnShaw
    @lawder
    @zenghaojim33
    看了 Realm ,比 CoreData 要简单
    Dashit
        17
    Dashit  
       2015-09-01 16:04:04 +08:00   ❤️ 1
    好吧就我一个用 NSARCHIVE
    siroccoicode
        18
    siroccoicode  
       2015-09-01 17:04:37 +08:00   ❤️ 1
    看用途,比较复杂的数据结构我会去用 FMDB ,一般的数据会使用 NSUserDefault 封装出的 Key-Value 存储。
    izon90
        19
    izon90  
       2015-09-01 17:45:05 +08:00 via iPhone
    coredata 和 ream 都用过,唯独没用过 sqlite
    damngood
        20
    damngood  
       2015-09-01 17:47:37 +08:00 via iPhone
    使用 realm 不知道对 binary size 有多大影响. 有空测试一个
    damngood
        21
    damngood  
       2015-09-01 17:49:04 +08:00 via iPhone
    realm 有个缺点是暂时还不支持全文搜索
    knightlhs
        22
    knightlhs  
       2015-09-01 18:05:15 +08:00
    搞明白 CoreData 还不如直接 FMDB 来的快 太繁琐了
    iEason
        23
    iEason  
       2015-09-01 18:51:39 +08:00
    fmdb
    oimotis
        24
    oimotis  
       2015-09-01 19:08:07 +08:00 via iPhone
    FMDB
    mazingyu
        25
    mazingyu  
       2015-09-01 19:40:27 +08:00
    Realm
    2015813
        26
    2015813  
       2015-09-01 22:50:19 +08:00 via Android
    从优秀案例来看,都是用 sqlite 做出来的居多。供楼主参考。
    Obelly
        27
    Obelly  
       2015-09-01 22:50:41 +08:00
    realm 的问题是线程安全问题,一不留神就掉坑里。
    zsk425
        28
    zsk425  
       2015-09-02 15:38:06 +08:00
    我在项目中用的是 Core Data , MagicalRecord 大大简化了操作,另外页面刷新主要依赖 NSFetchedResultsController 。没有使用过 Realm ,准备去了解一下。
    ibremn
        29
    ibremn  
       2015-09-20 15:35:55 +08:00
    #3 楼的时候,我提到了 Realm ,但是之前并没有在生产环境用过。。
    最近仔细调研了一下 Realm ,强烈不推荐使用:
    1. Realm 的核心是叫做 realm-core ,是一个 C++ 写的 binary 库,并不开源,而且有计划未来要收费。
    2. iOS 自带的 SQLite 版本比较旧,官网最新的 SQLite 相对于系统自带的库性能提升了非常多,我拿 Realm 提供的性能测试工程在真机上测试, Realm 在读写性能上都要差于 SQLite/FMDB 。
    3. Realm 目前还不够稳定,并且有很多坑,比如不支持 NULL 字段, id 不能自增等等。
    ldehai
        30
    ldehai  
    OP
       2015-09-21 10:45:12 +08:00
    @ibremn 是的,我在摸索使用的时候发现 id 不能自增,用起来挺费事的。
    fhefh
        31
    fhefh  
       2016-02-26 16:17:55 +08:00
    mark~
    vimffs
        32
    vimffs  
       2016-10-24 13:16:53 +08:00
    realm-core 上个月开源了,怎么看? https://github.com/realm/realm-core
    ldehai
        33
    ldehai  
    OP
       2016-10-24 19:33:18 +08:00
    @vimffs 新写的 app 用到了 realm-swift 版本,还行,就是增加字段还得迁移数据,有点麻烦
    finalshot
        34
    finalshot  
       2016-10-25 17:33:13 +08:00
    @ldehai Swift 3.0 吗?动态库还是源码引入?
    ldehai
        35
    ldehai  
    OP
       2016-10-25 20:29:43 +08:00
    @finalshot 用的 2.3 , pod
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3257 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.