我将描述我正在尝试构建的应用程序和我正在考虑的技术堆栈,以了解您的意见。
用户应该能够在任务列表中工作。这些任务来自API,包含有关它的所有信息:id,图像URL,描述等.API仅在一个数据中心可用,并且为了避免延迟,例如在中国,任务存储在队列中。
因此,根据您所在的国家/地区,您将拥有不同的队列,一旦您完成任务,它将被发送到另一个队列,稍后将在原始数据中心中写入此信息
任务列表非常庞大,这就是为什么有一个API调用来获取任务(~10k行),将它存储在一个队列中,用户可以根据它们所在国家的队列来处理它们。
对于这个系统,您可以拥有大约100个队列,我正在考虑使用redis来管理任务列表请求(例如:为中国队列获取5k行,在写入队列中写入500行等)。
API响应将作为json对象列表出现。例如,这些10k行需要存储在某处。由于您需要能够在此队列中进行过滤,因此MySQL不是一个选项,至少我将json对象的每个字段存储为新行。首先想到的是NoSQL DB,但我过去对MongoDB不太满意,API响应也没有太大变化。就像我需要关系表来做其他事情一样,我在思考PostgreSQL。它是一个关系数据库,你可以存储json并按它们过滤。
你怎么看?问我是不是很清楚答案 0 :(得分:0)
您可以使用PostgreSQL中的HStore扩展来存储JSON或MariaDB的动态列(MySQL克隆)。
如果你可以将持久性堆栈移动到java,那么可以使用许多有趣的选项:mapdb(但它需要内存并且它的api正在快速变化),persistit或mvstore(H2后面的引擎)。
所有这些都可以让json保持良好的表现。我建议你使用像lucene这样的全文搜索引擎来避免以慢速搜索json内容。