gpt4 book ai didi

grails - 用 10k 条记录初始化 Grails 应用程序

转载 作者:行者123 更新时间:2023-12-02 14:48:23 25 4
gpt4 key购买 nike

我正在尝试使用一个域类/表的 10k 记录作为初始数据集初始化一个新的 Grails 应用程序。

挑战:

我不想将它们注入(inject)数据库,因为我想让它们通过所有 Grails 验证器运行。

到目前为止我所做的:

对于初始数据集,在我的开发 PC 上,我已将它们注入(inject)数据库(通过 Talend Open Studio for Data Integration),然后生成 10k New像这样的陈述:

New Entity(prop1:'val1',prop2:'val2');

我已经在 Bootstrap 中尝试了数百个,效果很好。然后,我尝试了其中的 10k 个,Groovy 编译器有时堆栈跟踪 Class file too large有时它只是保持安静并停在那里。

基本思想是有类似的东西
if (Entity.count == 0) {
loadDataService.loadData()
}

我几乎不想承认,但我也尝试创建 10 个这样的服务,每个服务有 1000 条记录,然后一个接一个地加载它们,但是我的 IDE 中的内存消耗达到了空间,一切都停止了,有时它会通过说 java.lang.RuntimeException: Method code too large! (Java 方法中有 64kb 的限制,这是有道理的)。

我还想到了什么:

似乎使用 Rest-API 将是顺利获取 10k 记录的唯一方法。但是对于那个功能,我必须努力开发它,在我遇到另一个失败之前,我会听取你的建议。

问题:

我应该如何从这里开始?初始化应用程序的最佳方法是什么?

最佳答案

我已经解决了,感谢 @Daniel 的帮助和 @elixir
在解决问题的过程中,我遇到了另一个问题:每条记录后运行时间大幅增加记录,所以我不得不清除休眠 session 。这样一来,运行时间就像“每 2-3 秒 100 条记录”,所以它是线性的。 This article on grails.asia提供了这部分解决方案。

所以我最终得到了这段代码:

Bootstrap .groovy:

    if (Entity.count == 0) {
println "No Entity found - Launch initial import"
loadDataService.loadData()
println "Initial import finished"
}

和里面 加载数据服务 :
SessionFactory sessionFactory
def loadData() {
def inputFile = new File(grailsApplication.config.getProperty('importentitypath'))
def InputJSON = new JsonSlurper().parseFile(inputFile, 'UTF-8')
int mycounter = 0
InputJSON.each{
if (it.key=="data"){
it.value.each {myrow ->
mycounter+=1
if ((mycounter % 100) == 0 ) {
println mycounter
}
Entity.withNewTransaction {
Entity.findByRowkey(myrow.rowkey)?:new Entity(
rowkey:myrow.rowkey,
property1: myrow.property1,
property2: myrow.property2,
....
).save(failOnError:true, flush:true)
}
sessionFactory.currentSession.clear()
}
}
}
}

再次感谢您引导我找到该解决方案!

关于grails - 用 10k 条记录初始化 Grails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55281831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com