2

我有 MySQL 数据库,在其中存储以下 BLOB(包含 JSON 对象)和 ID(对于此 JSON 对象)。JSON 对象包含很多不同的信息。比如说,“城市:洛杉矶”和“州:加利福尼亚”。

目前大约有 50 万条这样的记录,但它们正在增长。而且每个 JSON 对象都很大。

我的目标是在 MySQL 数据库中进行搜索(实时)。说,我想搜索所有“状态”到“加利福尼亚”和“城市”到“旧金山”的 JSON 对象。

我想利用 Hadoop 来完成这项任务。我的想法是会有“工作”,它从 MySQL 中获取 100 条记录(行),根据给定的搜索条件验证它们,返回符合条件的那些(ID)。

优点缺点?我知道有人可能认为我应该为此使用简单的 SQL 功能,但问题是 JSON 对象结构非常“重”,如果我把它作为 SQL 模式,将至少有 3-5 个表连接,其中(我试过了,真的)让人很头疼,而且构建所有正确的索引占用 RAM 的速度比我想象的要快。;-) 即便如此,必须分析每个 SQL 查询以使用索引,否则使用全扫描它确实很痛苦。有了这样的结构,我们唯一的“向上”方式就是垂直缩放。但我不确定这对我来说是不是最好的选择,因为我看到 JSON 对象将如何增长(数据结构),而且我看到它们的数量也会增长。:-)

帮助?有人可以指出如何做到这一点的简单例子吗?这有意义吗?我错过了什么重要的东西吗?

谢谢你。

4

3 回答 3

2

需要考虑的几点建议:

  • Hadoop(特别是 HDFS)围绕机器集群分布数据。使用 MapReduce 分析/处理这些数据需要将数据存储在 HDFS 上,以利用 Hadoop 提供的并行处理能力。

  • Hadoop/MapReduce 远不是实时的。即使在少量数据上运行时,Hadoop 设置作业所需的时间也可能是 30 多秒。这是无法阻止的事情。

也许需要研究的是使用 Lucene 将您的 JSON 对象索引为文档。您可以将索引存储在 solr 中,并轻松查询您想要的任何内容。

于 2010-04-22T22:25:19.227 回答
0

听起来您正在尝试重新创建 CouchDB。CouchDB 是使用 map-reduce 框架构建的,专门用于处理 JSON 对象。

于 2010-04-28T17:24:06.507 回答
0

事实上你是......因为在一个巨大的文本字段中搜索将花费比索引数据库和搜索正确的 sql 方式更多的时间。该数据库是为与 sql 和索引一起使用而构建的,它不具备解析和索引 json 的能力,因此无论您以何种方式在 json 中搜索(可能只是 hacky 字符串匹配)都会慢得多。500k 行对于 mysql 来说并不多,你真的不需要 hadoop,只需要一个好的规范化模式、正确的索引和优化的查询

于 2010-04-22T05:04:20.697 回答