简体   繁体   English

使用.net进行实时数据存储和访问

[英]Real time data storage and access with .net

Does anyone have any experience with receiving and updating a large volume of data, storing it, sorting it, and visualizing it very quickly? 有没有人有接收和更新大量数据,存储,排序和快速可视化的经验?

Preferably, I'm looking for a .NET solution, but that may not be practical. 最好是,我正在寻找.NET解决方案,但这可能不实用。

Now for the details... 现在详情......

I will receive roughly 1000 updates per second, some updates, some new rows of data records. 我将每秒收到大约1000次更新,一些更新,一些新的数据记录行。 But, it can also be very burst driven, with sometimes 5000 updates and new rows. 但是,它也可以是非常突发驱动的,有时会有5000个更新和新行。

By the end of the day, I could have 4 to 5 million rows of data. 到那天结束时,我可能有400到500万行数据。

I have to both store them and also show the user updates in the UI. 我必须存储它们并在UI中显示用户更新。 The UI allows the user to apply a number of filters to the data to just show what they want. 用户界面允许用户对数据应用多个过滤器,以显示他们想要的内容。 I need to update all the records plus show the user these updates. 我需要更新所有记录并向用户显示这些更新。

I have an visual update rate of 1 fps. 我的视觉更新率为1 fps。

Anyone have any guidance or direction on this problem? 任何人对此问题有任何指导或指导? I can't imagine I'm the first one to have to deal with something like this... 我无法想象我是第一个必须处理这样的事情的人......

At first though, some sort of in memory database I would think, but will it be fast enough for querying for updates near the end of the day once I get a large enough data set? 首先,我会考虑某种内存数据库,但是一旦我获得足够大的数据集,它是否足够快以便在一天结束时查询更新? Or is that all dependent on smart indexing and queries? 或者这完全取决于智能索引和查询?

Thanks in advance. 提前致谢。

It's a very interesting and also challenging problem. 这是一个非常有趣且具有挑战性的问题。

I would approach a pipeline design with processors implementing sorting, filtering, aggregation etc. The pipeline needs an async (threadsafe) input buffer that is processed in a timely manner (according to your 1fps req. under a second). 我会接近管道设计,处理器实现排序,过滤,聚合等。管道需要一个异步(线程安全)输入缓冲区,及时处理(根据您的1fps请求,在一秒钟内)。 If you can't do it, you need to queue the data somewhere, on disk or in memory depending on the nature of your problem. 如果您不能这样做,则需要根据问题的性质将数据排在某处,磁盘或内存中。

Consequently, the UI needs to be implemented in a pull style rather than push, you only want to update it every second. 因此,UI需要以拉式而不是推式实现,您只想每秒更新一次。

For datastore you have several options. 对于数据存储区,您有多种选择。 Using a database is not a bad idea, since you need the data persisted (and I guess also queryable) anyway. 使用数据库并不是一个坏主意,因为无论如何你需要数据持久化(我猜也是可查询的)。 If you are using an ORM, you may find NHibernate in combination with its superior second level cache a decent choice. 如果您使用的是ORM,您可能会发现NHibernate与其卓越的二级缓存相结合是一个不错的选择。

Many of the considerations might also be similar to those Ayende made when designing NHProf, a realtime profiler for NHibernate. 许多考虑因素也可能类似于Ayende在设计NHProf时所做的那些,NHProf是NHibernate的实时分析器。 He has written a series of posts about them on his blog . 他在博客上写了一系列关于他们的帖子。

May be Oracle is more appropriate RDBMS solution fo you. 可能是Oracle更合适的RDBMS解决方案。 The problem with your question is that at this "critical" levels there are too much variables and condition you need to deal with. 您的问题的问题在于,在这个“关键”级别,您需要处理太多变量和条件。 Not only software, but hardware that you can have (It costs :)), connection speed, your expected common user system setup and more and more and more... Good Luck. 不仅软件,而且你可以拥有的硬件(它的成本:)),连接速度,你期望的普通用户系统设置和越来越多...祝你好运。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM