选择适当的STL容器来记录数据

| 我需要在客户端服务器应用程序中使用日志记录和筛选机制。客户端可以根据某些参数请求日志数据。 日志将具有MACID,日期和时间,命令类型和方向作为字段。 服务器也可以基于这些参数过滤日志数据。 日志的大小为10 mb,之后日志将从一开始就覆盖该消息。 我的方法是将数据也以“在内存中”的形式登录到STL容器中的文件中,以便当客户端请求数据服务器将根据任何条件过滤日志数据时 因此,过程是服务器将首先对vector <>上的特定条件进行排序,然后使用二进制搜索对其进行过滤。 我打算在内存日志记录数据中使用vector作为STL容器。 我对向量是否适合这种情况感到困惑。 因为矢量数据的大小最大为10 mb。 我的问题是载体在这种情况下是否足够?
已邀请:
我会摆出双端队列。它就像一个向量,但是您可以从两端添加/删除元素。
我首先要说的是,由于有很多日志库,因此我会使用它,并且向您保证它们会做得更好(例如log4cxx)。如果您坚持要自己这样做,向量是一种适当的机制,但是您将必须手动对因用户请求而产生偏差的数据进行排序。另一种想法是使用sqllite,并使其管理存储排序和过滤数据。
实际响应将在很大程度上取决于使用模式和界面。如果您使用的是图形用户界面,则很可能已经有一个小部件在某种程度上实现了该功能(可以按不同的列进行排序,甚至可以进行过滤)。如果您确实想在UI外部实现此功能,则取决于使用模式,用户是否希望某个特定视图比其他视图更多?她是否只需要过滤或排序? 如果在大多数情况下可以使用一种数据视图,并且只需要显示几次不同的顺序,我将保留元素的
std::vector
或ѭ1elements,并在需要时使用
remove_copy_if
进行过滤。如果需要不同的排序,我将复制副本并对其进行排序,以避免不得不根据时间重新排序以继续向日志中添加元素。请注意,如果应用程序不断推送数据,则需要使用适当的新元素来更新副本(或提供固定的视图并定期重新运行该操作)。 如果没有特定的视图比其他视图更频繁地出现,或者如果您不想经历实现上述困难的话,那么请看一下提升多索引容器的方法。他们使用不同的条件保持相同数据的同步视图。在后一种情况下,这可能是最有效的,即使在主导视图的一般情况下效率可能较低,也可能使事情变得简单,因此仍然值得。

要回复问题请先登录注册