【问题标题】:Grails App with Huge Tables带有巨大表的 Grails 应用程序
【发布时间】:2014-12-04 16:34:15
【问题描述】:

我正在尝试从现有的 csv 文件创建一个数据库,该文件大约有 20,000 列宽和 700 行深。在 grails 中,我希望 20,000 列域属于另一个更简单的域(大约 200 列)。但编译后我得到:

java.lang.RuntimeException: Class file too large!

这是可以理解的,因为它的数据太多了。我的问题是,在 grails 中处理这个问题的最佳方法是什么?我应该简单地将大表分解为单独的域吗?寻找不同的表格格式?

我特别担心:

1) 搜索时间,解析搜索方法然后委托给子域。

2) 将数据从巨大的 csv 文件导入到域中。

【问题讨论】:

  • RuntimeException 是否来自具有 20,000 个持久属性、200 个持久属性或其他属性的域类?
  • 在向域添加 20,000 个持久属性后尝试执行 grails run-app 时出现此问题。但我认为它甚至没有达到它是一个 grails 问题的地步,它只是因为它太大而无法编译它。堆栈跟踪类似于这个问题:stackoverflow.com/questions/17758510/…
  • 您是否有脚本或其他东西为具有 20,000 个属性的域类生成源代码或手动定义所有这些属性?
  • 手工制作。不得不从 csv 文件中提取列名,然后添加类型......这太糟糕了:)
  • 您是从哪一年开始提取姓名的?

标签: csv grails bigdata


【解决方案1】:

当您遇到这样的 JVM 大小限制时,将其视为您的方法已经过时的重要暗示。正如我在本周早些时候的另一个问题中提到的那样,我们甚至不应该知道这些限制是什么,更不用说接近它们了。

对于这么多数据,我认为使用 GORM 甚至 O-O 方法并没有多大好处。它不是任何现实、可用意义上的对象——它是一大堆数据。无论如何,您都需要以编程方式访问所有内容,即使它确实有效,因为手动管理代码将是大量的代码。您真的打算创建这些野兽的一个或多个实例并将它们作为方法 args 传递吗?

您需要从大数据的角度而不是 ORM 的角度来看待这个问题。

【讨论】:

  • 嗯,我明白了。那么,如果我重新排列我的域文件以使列名成为具有某个值(我要分配的原始类型)的一些通用属性,然后让 id + fk 对它们进行排序呢?那行得通吗?基本上使域变得更小并最终得到 20,000*600 行?顺便说一句,得到伯特贝克威斯回答的问题真是太棒了:)
  • 有太多后续问题要问,这些问题会将其发送到讨论中,但 SO 不是为此而设计的。它最擅长解决重点问题并提供一个或多个可能的重点答案。您需要考虑数据的结构、如何使用以及研究工具。这在 NoSQL DB 中可能会更好,但那里有很多选择。您还需要查看最近开发的有助于分析和数据管理的工具。在这两种情况下,这些都不是容易做出的决定,您不必拘泥于一种方法。
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2012-08-18
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多