我有MySQL数据库,我存储以下BLOB(包含JSON对象)和ID(对于此JSON对象)。 JSON对象包含许多不同的信息。比如,“城市:洛杉矶”和“州:加利福尼亚”。
现在大约有500,000个这样的记录,但它们正在增长。每个JSON对象都很大。
我的目标是在MySQL数据库中进行搜索(实时)。 说,我想搜索所有“州”到“加利福尼亚”和“城市”到“旧金山”的JSON对象。
我想利用Hadoop完成任务。 我的想法是会有“工作”,从MySQL获取100个记录(行)的块,根据给定的搜索条件验证它们,返回符合条件的那些(ID)。
优点/缺点?我知道有人可能认为我应该利用简单的SQL功能,但问题是JSON对象结构非常“重”,如果我把它作为SQL模式,那么至少会有3-5个表连接,其中(我试过,真的)造成了很大的麻烦,构建所有正确的索引比我想象的更快地占用内存。 ;-)即便如此,每个SQL查询都必须进行分析以利用索引,否则完全扫描它确实很痛苦。有了这样的结构,我们唯一的方法是“向上”只是垂直缩放。但我不确定这对我来说是最好的选择,因为我看到JSON对象将如何增长(数据结构),我发现它们的数量也会增长。 : - )
帮助?有人能指出我如何做到这一点的简单例子吗?它有意义吗?我错过了一些重要的事情吗?
谢谢。
答案 0 :(得分:2)
几点需要考虑:
Hadoop(特别是HDFS)在一组机器周围分发数据。使用MapReduce分析/处理此数据需要将数据存储在HDFS上,以利用Hadoop提供的并行处理能力。
Hadoop / MapReduce几乎不是实时的。即使在运行少量数据时,Hadoop设置作业所需的时间也可能超过30秒。这是无法阻止的。
可能需要考虑的事情是使用Lucene将JSON对象编入索引作为文档。您可以将索引存储在solr中,并轻松查询您想要的任何内容。
答案 1 :(得分:0)
实际上你是..因为在一个巨大的字段中搜索文本将比索引数据库和搜索正确的sql方式花费更多的时间。数据库是为了与sql和索引一起使用而构建的,它没有能力解析和索引json,所以无论你在json中搜索哪种方式(可能只是hacky字符串匹配)都会慢得多。 500k行对于mysql来说并不是那么多,你真的不需要hadoop,只是一个很好的规范化架构,正确的索引和优化的查询
答案 2 :(得分:0)
听起来你正在尝试重新创建CouchDB。 CouchDB使用map-reduce框架构建,专门用于JSON对象。