存储大量数据的最智能方法

Posted

技术标签:

【中文标题】存储大量数据的最智能方法【英文标题】:Smartest way to store huge amounts of data 【发布时间】:2014-07-21 23:15:29 【问题描述】:

我想通过 REST 请求访问 flickr API 并下载大约 100 的元数据。 1 张 Mio 照片(可能更多)。 我想将它们存储在 .csv 文件中,然后将它们导入 mysql 数据库以进行进一步处理

我想知道处理这种大数据的最聪明的方法是什么。我不确定的是如何在 Python 中访问网站后存储它们,将它们传递到 .csv 文件并从那里传递到数据库。这是一个很大的问号。

现在发生的事情(据我了解,请参见下面的代码)是为每个 photo 创建一个 dictionary(每个调用 URL 250)。这样,我最终会得到与照片一样多的字典(1 Mio 或更多)。那可能吗? 所有这些dictionaries 将被附加到一个列表中。我可以将这么多字典附加到列表中吗?我想将字典附加到列表的唯一原因是因为从列表中逐行保存到 .csv 文件似乎更容易。

您应该知道的是,我是编程、python 或其他任何东西的完全初学者。我的职业完全不同,我刚刚开始学习。如果您需要任何进一步的解释,请告诉我!

#accessing website
list = []
url = "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5...1b&per_page=250&accuracy=1&has_geo=1&extras=geo,tags,views,description"
soup = BeautifulSoup(urlopen(url)) #soup it up
for data in soup.find_all('photo'):
    dict = 
        "id": data.get('id'),
        "title": data.get('title'),
        "tags": data.get('tags'),
        "latitude": data.get('latitude'),
        "longitude": data.get('longitude'),
    
print (dict)

list.append(dict)

我正在使用 python 3.3。我不将数据直接传递到数据库的原因是因为我无法在我的 os x 10.6 上运行 mysql db 的 python 连接器。

非常感谢任何帮助。 谢谢各位!

【问题讨论】:

.csv 中间人的使用效率低下、耗时且棘手。为什么您的 MySQL Python 驱动程序不工作?我认为这是你应该首先解决的问题(如果可能的话),这是一个完全不同的问题。 我尝试解决后想烧掉我的电脑,然后跳出窗外。但我在这里,尝试解决。 在这个网站上问这个问题 - 你会在某个时候想要那个 MySQL 驱动程序,对吧? 我不确定。这给我带来了很多麻烦。如果我能做到 SQLite 或其他东西,我宁愿用它来做。 【参考方案1】:

我建议使用 SQLite 进行原型设计,而不是使用 CSV。 SQLite 与 python 配合得很好,但您不必经历设置单独数据库的所有麻烦。

另外,我不认为你想为此使用 BeautifulSoup,因为它听起来不像是你真正想要的。听起来您想直接访问 REST API。为此,您需要使用类似的东西 the requests library 或者更好 one of the flickr Python bindings.

一旦你启动并运行它,我会在循环的每次迭代期间写入数据库,并在你运行时保存。这样您就不会使用大量内存,并且如果发生崩溃,您也不会丢失迄今为止提取的数据。

【讨论】:

嘿,感谢 flickr python 绑定的提示。不知道他们!我认为它的网络抓取是因为我调用了一个以 XML 格式格式化的网站并尝试从中提取信息?我会看看 SQLite 我从未使用过 flickr API,但看起来您可以使用几种不同的格式。我推荐 JSON。因此,您的请求格式为 REST,您的响应格式为 JSON。 那我就不能用bs解析了。与 XML 相比,JSON 有什么好处? 正确,您根本不需要 BeautifulSoup。 JSON 比 XML 更简洁,因此存储相同数量的信息所需的文本更少。这有好有坏,但归根结底,JSON 作为人类更容易阅读。此外,许多(大多数?)新 API 专门使用 JSON。 嗯,是的,在你用 BeautifulSoup 解析它之后,它会很容易。我的意思是,如果您查看 XML 文件与 JSON 中的相同数据,大多数人更喜欢 JSON 格式的原始格式。见here

以上是关于存储大量数据的最智能方法的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 中存储和访问庞大数据矩阵的最有效方法

比较大量相似文本的最简单方法是啥?

试图找到将 SQL Query 转换为具有大量记录的 Pandas DataFrame 的最有效方法

在数据库中存储大量标记的最佳方法是啥?

EF6 + SQL 14:将大量行上传到表中的最有效方法

NLPIR语义智能平台支持大数据个性化学习