我先解释用例。
高读取率(10000+ p / s),大型数据集(大量字符串代码(想想促销代码)寻找匹配,字符串10 - 20个字符串)。需要快速的响应时间。
首先想到的是memcached。然而,如果memcache崩溃并开始从像mysql这样的数据库重新填充缓存,那么就可以解决停机问题....我正在考虑重新启动自动重新缓存缓存。
redis不会持久存在于硬盘驱动器中,而是需要调用刷新才能备份它吗?
我希望使用代码字符串作为使查找超级快速的键。值将是一个id,将其链接到api不需要的db记录。
如果我不得不猜测将存储多少个独特的字符串.....几个月后会有10M +。
我还简短地看了一下Cassandra和mongodb。我认为mongodb不够,因为它没有将整个列表存储在内存中?
对这些系统的任何了解都非常有用。感觉就像我在圈子里走来走去。
api是在nodejs中创建的。 (如果重要的话)
答案 0 :(得分:2)
对于像Cassandra这样的数据库来说,10K / s绝对不是一个很高的速率,因为你的架构是明智的。我敢打赌,其他人也一样。 每个月10M独特的字符串是现代大数据系统的花生。
无论您保留何种大数据解决方案,您都必须根据数据类型和运营需求设计架构。
IMO,重要的是以下两个问题:
“寻找比赛”是什么意思?
如果您需要使用子字符串或正则表达式进行索引和搜索,则需要一个搜索引擎:ElasticSearch或SOLR非常棒。警告E / S进行复制和分片,但它的分发模型仍然不是100%安全。
您提及的系统都没有提供您似乎想要的反应性。
如果您将使用静态字符串进行查询:像Cassandra这样的键值存储或面向列的数据库将是完美的选择。所以一切都很合适。
什么是快速响应时间?
通过选择合适的技术和适当的模式,所有这些系统将在数百毫秒内为您提供极佳的响应时间,但它对您来说是否足够快?
REDIS和MemCached在内存中将提供更快的响应。
作为结论,node.js中的API与您的存储和索引技术的选择无关,除非您想坚持使用Javascript以及MongoDB对您更友好,它可能是一个不错的候选人取决于您的搜索用例。