我已经编写了一个应用程序,主要用于嗅探以太网设备,并研究某些模式。我正在使用Python和Scapy来捕获数据。由于数据需要在后人数据库中进行捕获,并且对于模式研究,我们正在考虑采用以下策略。Redis:内存优化/性能策略
1)我们希望使用高性能键值存储来捕获基本数据。这基本上是一个关键:大约200个密钥的价值商店。 2)每隔一小时我们就会把关键存储池集中起来,根据特定的条件和模式,我们将根据存储在K:V存储中的值填充一个Postgres数据库。
我们计划在K:V中使用Redis。我们曾考虑过其他解决方案,包括数据库,基于文件的缓存等,但存在性能瓶颈。例如,每分钟有数千个数据包被处理,SQL从数据库来回调用会减慢程序的速度。
我从来没有使用过Redis。但我被告知它是最快和最高效的K:V无SQL数据存储。 redis python APi使其非常Pythonic。实质上,数据库存储将有200个奇数键和一个与80%键相关的长整型值,或者在某些情况下,小于200个字符的char字段。
问题
1)这是正确的做法吗? 2)需要考虑哪些其他参数? 3)记忆量会增加多少?我应该做些什么来确保内存大小经过优化以提高性能? 4)如何计算内存大小?
Python是我们唯一知道的语言。所以,像C/C++这样的建议可能不会吸引人。
我们确信偶尔会有一些数据包丢失,因为这个想法是研究模式而不是绝对准确的结果。键的数量将保持不变,并且它们的值可以上下移动。
我们最终需要将计算的数据存储在RDBMS中,因为未来的主要计算是SQL密集型的。
您是否意味着每个数据包有200个键值对?否则,它听起来像一个非常小的数据库。 –
这是一个很小的数据库。但正如我所提到的,它不断更新,值每秒都会多次改变 – ramdaz
为什么不简单使用Python字典? –