首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CSV - macOS的核心数据中创建2000万条记录

在CSV - macOS的核心数据中创建2000万条记录
EN

Stack Overflow用户
提问于 2019-04-28 20:11:25
回答 1查看 84关注 0票数 1

我正在建立一个大型的CSV (4 4GB)的数据库,为自己的本地工作,这将不是一个生产应用程序。一开始我只有一个模型/实体,它包含8-9个属性,大部分是字符串和一些Int,我将有大约2000万条记录要存储。我将只从此CSV写入数据库一次,然后它将接收增量更新,以每月添加或修改大约50,000条记录。我将相当频繁地查询数据库,但仅作为单个用户。

核心数据是此场景的正确选择吗?我知道它是一个对象图,而不仅仅是一个数据库,我有一个16 8GB的内存iMac和一个8 8GB的Macbook pro,我不确定在使用核心数据时这可能会有多大的内存限制。我正在尝试弄清楚是使用SQLite更好,还是核心数据是适合这项工作的正确工具。

如果核心数据是这个用例的一个很好的选择,那么我可以使用一些帮助来组织记录的创建,而不是将自己限制在ram上。据我所知,我应该将实体写入子上下文,当我准备复制到磁盘时,我会将数据从子上下文传递到其父上下文(内存到内存),然后父上下文可以写入/刷新到磁盘。

这就是我可视化过程的方式,我将只在示例中的实体上使用一个属性。

代码语言:javascript
复制
DispatchQueue.global(qos: .background).async { //Non blocking
    //iterate line by line over csv reader never exceeds 9.1MB takes 30 mins. I will look into chunking to better utilise multithreading later.
    for (index, row) in reader.enumerated()  {
        let person = Person(entity: personEntity, insertInto: backgroundContext)
        person.setValue(row[0], forKey: "name")

        //When I hit x iterations or x seconds since last save - save to disk and clear the ram for the context 
        backgroundContext.perform {
            do {
                try backgroundContext.save() //I beleive pushes changes only to its parent context?
               //Clear background context ram (of stored records) 

               // Main context should now write to disk and then it should also clear its ram
              //do {
                  //main context work
             //} catch {

             //}
            } catch {
                //error handling 
            }
        }
    }
} 

我有几个问题源于我没有清楚地理解核心数据结构。

1)在从主上下文保存到持久存储之后,我想确保主上下文可以从ram刷新那些记录。我不想清除ram中的所有记录,因为主上下文可能是从后台上下文写入的,而主上下文正在写入磁盘(实际上是数据丢失)。

2)类似于第1点,当后台上下文保存时,我希望确保后台上下文仅清除ram中保存到其父上下文的记录。

如果任何人能阐明一些情况或提供一些正确结构的例子,将不胜感激。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2019-04-28 20:50:39

我想NSManagedObjectContext类的reset()函数就是你想要的。

但是我真的认为你在错误地使用CoreData,我建议你用准备好的.sqlite文件(从CSV创建)来初始化CoreData。与手动创建NSManagedObject实例并将其保存到上下文中相比,它的工作效果更好,速度也更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55890118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档