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