-->

读这么的数据转储有效(To read SO's data dump effectively)

2019-09-19 10:32发布

我目前使用Vim读SO的数据转储 。 然而,我的MacBook当我摇下只有几行减慢。 这意味着我必须有更有效的方法来读取数据。

我知道一点的MySQL。 该文件以.xml -format。 这是相当难在.XML瞬间读取数据。 它可能是更有效地转换为XML -files到MySQL,然后读取文件。 我只知道MS分贝这种行动 - 工具。 不过,我想知道其他工具了。

问题

  1. 解析.XML到SQL -queries使得MySQL的理解。 我们需要知道数据的数据结构。
  2. 运行在MySQL数据
  3. 找到类似于MS分贝 - 工具的一些工具,使我们能够有效地读取数据

你怎么看了这么的数据转储有效?

-

[编辑]

  1. 你怎么能运行523个SQL查询来创建你的终端数据库? 我有命令在文本-file的时刻。
  2. 你怎么能“切换到[恢复模式],在数据库的简单恢复模式?

Answer 1:

我做了我第一次Python程序读取它们并与MySQL使用输出SQL INSERT语句(这是丑陋的,但工作)。 你需要通过先用手虽然创建表。

import xml.sax.handler
import xml.sax
import sys
class SOHandler(xml.sax.handler.ContentHandler):
        def __init__(self):
                self.errParse = 0

        def startElement(self, name, attributes):
                if name != "row":
                        self.table = name;
                        self.outFile = open(name+".sql","w")
                        self.errfile = open(name+".err","w")
                else:
                        skip = 0
                        currentRow = u"insert into "+self.table+"("
                        for attr in attributes.keys():
                                currentRow += str(attr) + ","
                        currentRow = currentRow[:-1]
                        currentRow += u") values ("
                        for attr in attributes.keys():
                                try:
                                        currentRow += u'"{0}",'.format(attributes[attr].replace('\\','\\\\').replace('"', '\\"').replace("'", "\\'"))
                                except UnicodeEncodeError:
                                        self.errParse += 1;
                                        skip = 1;
                                        self.errfile.write(currentRow)
                        if skip != 1:
                                currentRow = currentRow[:-1]
                                currentRow += u");"
                                #print len(attributes.keys())
                                self.outFile.write(currentRow.encode("utf-8"))
                                self.outFile.write("\n")
                                self.outFile.flush()
                                print currentRow.encode("utf-8");

        def characters(self, data):
                pass

        def endElement(self, name):
                pass

if len(sys.argv) < 2:
        print "Give me an xml file argument!"
        sys.exit(1)

parser = xml.sax.make_parser()
handler = SOHandler()
parser.setContentHandler(handler)
parser.parse(sys.argv[1])
print handler.errParse


文章来源: To read SO's data dump effectively