首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内存中处理实时数据的最佳选择是什么?

在内存中处理实时数据的最佳选择是什么?
EN

Stack Overflow用户
提问于 2012-01-21 23:55:44
回答 3查看 962关注 0票数 2

客户端将一些实时数据发送到服务器。服务器将对这些数据进行简单的分析。它只查找特定范围内的数据,或对某些数据进行排序。大部分数据在分析后会被丢弃,因此不需要保存在磁盘中。

我想使用一些内存DB来处理它们。MYSQL的内存引擎是个不错的选择吗?如果我使用一些键值内存缓存引擎,比如Redis,会怎么样?因为我需要比较数据,可能纯粹的键值存储不能满足我的需求。

EN

回答 3

Stack Overflow用户

发布于 2012-01-22 00:05:05

对我来说,这听起来似乎没有数据库更好,但这取决于您的数据结构和您必须执行的操作类型。

如果结构简单,操作容易,那么您可能应该将数据存储在您正在使用的编程平台的数据结构中。

票数 3
EN

Stack Overflow用户

发布于 2012-01-22 05:28:25

如果我使用一些键值内存缓存引擎,比如Redis怎么办?

Redis支持先进的数据结构,这使得它成为一个非常方便的基于键值的数据存储,然而,如果你的数据需要复杂的关系,那么你可能应该看看MongoDBOrientDBRiak,它们都应该支持基于内存的存储引擎。

票数 3
EN

Stack Overflow用户

发布于 2012-01-22 18:46:07

如果您计划使用MySQL的内存引擎,有几个陷阱:

  • 默认情况下,索引是使用哈希表而不是btree实现的。如果您需要对数据进行排序,或支持范围,则使用btrees可能会使interesting.
  • locking粒度更大。有一个可防止并发DML操作的读/写锁。虽然原始性能还不错,但当您同时有多个写入器时,可伸缩性就不是很好。
  • 所有行都有固定的宽度(注意,如果您需要存储varchar...)

此外,与大多数其他关系型数据库一样,MySQL协议也是同步的。每次客户端写入数据库时,都会等待回复。如果你有大量的数据,为了获得良好的性能,批量写操作几乎是必须的。

这实际上取决于容量、客户端数量和吞吐量。如果要求很低,那么任何存储解决方案(包括MySQL)都可以很好地工作。现在,如果需要更高的性能或更高的可扩展性,那么其他解决方案可能会更好。

你想写的可能是一个肮脏的应用程序(数据密集型实时)。好的存储解决方案是MongoDB (支持upserts,用于写操作的单向协议,等等)和Redis (内存、O(1)操作、流水线等)。根据您的需要,使用MongoDB可以更轻松地进行数据建模和处理,因为它支持btree索引和map/reduce。使用Redis可能会有点复杂,但如果您选择正确的数据结构,您最终将获得更具确定性的性能。

最后,您可能还希望通过动态处理数据来避免存储数据。您可以使用流媒体引擎来实现这一点,比如在高速交易平台上使用的流媒体引擎。例如,如果您准备用Java语言编写代码,ESPER是处理数据流和/或使用类SQL语言在流之间建立关联的优秀CEP解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8954361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档