我是数据库的新手,我正试图找到一个处理大型数据集的好方法。我主要使用R进行统计分析,所以我不需要数据库作为网页的后端或任何东西。数据集通常是静态的 - 它们只是很大。
我试图在~1,400,000表上对~10,000,000记录表进行简单的左连接。 1.4米的桌子有独特的记录。搅拌3个小时后,它就退出了我。正确指定了查询 - 我运行它将检索限制为1000条记录,并且它完全按照我的预期返回。最后,我找到了一种方法将其拆分为10个查询然后运行,但到了这个时候,我能够很快地在R中进行合并,而不需要对sqlite和索引进行任何花哨的调用。
我一直在寻找使用数据库,因为我认为他们对这些基本数据操作更快/更有效,但也许我只是忽略了一些东西。在上面的例子中,我已在相应的列中编入索引,我很惊讶sqlite在R可以处理时无法处理它。
很抱歉,如果这个问题有点模糊(我对数据库有点模糊),但是如果有人对某些显而易见的东西有任何建议我就错了,不能利用sqlite的强大功能,那就太棒了。或者我只是期待其中的大部分,并且100米X 1.4米的记录合并太大而不能破坏它?
我认为数据库在这方面的表现可能超过R?
谢谢!
EXL
答案 0 :(得分:3)
我正在经历同样的过程。如果你仔细看看我最近问过的问题,你可能会得到一些好的指示,或者至少可以避免浪费很多时间:)。简而言之,这对我来说是最有帮助的。
- RSQLite包
- SQLite FAQ
我还是一个新手,但总的来说,你应该使用SQLite来分类太大而无法引入RAM的数据。我认为如果数据足够小以便在RAM中处理,那么最好使用本机R工具进行连接/子集。如果您发现自己对SQL查询更加熟悉,那么就会有sqldf包。此外,JD Long在使用sqldf和大型数据集方面有很大的discussion。
答案 1 :(得分:2)
我必须承认,我很惊讶这对你来说是一个问题。 SQLite一直对我很有用,至少在速度方面。但是 - SQLite很容易,因为它非常灵活。 SQLite可能很危险,因为它非常灵活。 SQLite往往对数据类型非常宽容。有时这是一个绝对的神派,当我不想花费大量时间来调整完美的东西时,但是具有很大的灵活性会带来很大的责任。
我注意到我需要小心将数据移入SQLite。文字很简单。但是,有时数字会被存储为文本而不是数字。对一列数字执行JOIN比一列文本上的JOIN快。如果您的数字列存储为文本,然后强制转换为数字进行比较,您将失去使用索引的大部分优势。
我不知道你是如何将数据导入SQLite的,所以我要做的第一件事就是查看你的表模式并确保它们有意义。虽然它们看起来很明显,但索引可能很棘手。查看查询也可能会产生一些有用的东西。
如果无法查看基础结构和查询,这个问题的答案将会受到教育猜测。