客户端将一些实时数据发送到服务器。服务器将对这些数据进行简单的分析。它只查找特定范围内的数据,或对某些数据进行排序。大部分数据在分析后会被丢弃,因此不需要保存在磁盘中。
我想使用一些内存DB来处理它们。MYSQL的内存引擎是个不错的选择吗?如果我使用一些键值内存缓存引擎,比如Redis,会怎么样?因为我需要比较数据,可能纯粹的键值存储不能满足我的需求。
发布于 2012-01-22 00:05:05
对我来说,这听起来似乎没有数据库更好,但这取决于您的数据结构和您必须执行的操作类型。
如果结构简单,操作容易,那么您可能应该将数据存储在您正在使用的编程平台的数据结构中。
发布于 2012-01-22 05:28:25
如果我使用一些键值内存缓存引擎,比如Redis怎么办?
Redis支持先进的数据结构,这使得它成为一个非常方便的基于键值的数据存储,然而,如果你的数据需要复杂的关系,那么你可能应该看看MongoDB,OrientDB或Riak,它们都应该支持基于内存的存储引擎。
发布于 2012-01-22 18:46:07
如果您计划使用MySQL的内存引擎,有几个陷阱:
此外,与大多数其他关系型数据库一样,MySQL协议也是同步的。每次客户端写入数据库时,都会等待回复。如果你有大量的数据,为了获得良好的性能,批量写操作几乎是必须的。
这实际上取决于容量、客户端数量和吞吐量。如果要求很低,那么任何存储解决方案(包括MySQL)都可以很好地工作。现在,如果需要更高的性能或更高的可扩展性,那么其他解决方案可能会更好。
你想写的可能是一个肮脏的应用程序(数据密集型实时)。好的存储解决方案是MongoDB (支持upserts,用于写操作的单向协议,等等)和Redis (内存、O(1)操作、流水线等)。根据您的需要,使用MongoDB可以更轻松地进行数据建模和处理,因为它支持btree索引和map/reduce。使用Redis可能会有点复杂,但如果您选择正确的数据结构,您最终将获得更具确定性的性能。
最后,您可能还希望通过动态处理数据来避免存储数据。您可以使用流媒体引擎来实现这一点,比如在高速交易平台上使用的流媒体引擎。例如,如果您准备用Java语言编写代码,ESPER是处理数据流和/或使用类SQL语言在流之间建立关联的优秀CEP解决方案。
https://stackoverflow.com/questions/8954361
复制相似问题