2011-04-20 76 views
1

我需要在客户端服务器应用程序中记录和过滤机制。其中客户端可以根据某个参数请求日志数据。选择合适的STL容器进行日志记录数据

日志将具有MACID,日期和时间,命令类型和方向字段。

服务器也可以根据这些参数过滤日志数据。 日志的大小是10 MB之后,日志将从开始覆盖消息。

我的做法是,我将“内存”,在日志数据中的STL容器为到文件以及这样,当客户端请求数据服务器将筛选基于任何标准

日志数据,所以过程是服务器将首先对矢量<>上的特定条件进行排序,然后使用二分搜索对其进行过滤。

我打算在内存中记录数据用向量作为STL容器。

我有点糊涂了矢量是否会在适当这种情况下,还是不行。

因为可以最大的数据的大小高达在矢量10 MB。 我的问题矢量是否足够适合这种情况?

+0

我还不清楚,如果你已经在文件上记录,那么为什么你还需要登录到'矢量'?你的代码是否需要读'vector'? – iammilind 2011-04-20 06:56:34

+0

我需要将日志信息存储在向量中,以便在用户根据上述参数请求日志数据时对其进行过滤。客户端服务器程序将记录服务器日志数据和客户端请求的日志数据。 – 2011-04-20 08:38:54

回答

1

我想去一个双排队,双端队列。它就像一个矢量,但你可以从两端添加/删除元素。

+0

为什么你想在这种情况下开始添加/删除元素? – Gorpik 2011-04-20 07:41:08

+0

元素需要被移除,一旦10mb大小达到。如果达到限制,最新添加的消息将被删除。 – 2011-04-20 08:36:35

+0

事件在一端添加并在另一端删除。 你可以用一个向量和一个指针来完成同样的事情,这个指针告诉你在哪里覆盖旧的事件,但是这个deque只是为你做的。 – Adam 2011-04-20 08:37:39

1

我会,因为有许多和我向你保证,他们会做(对前log4cxx)一份更好的工作,我会使用一个日志库第一状态。如果你坚持这样做你自己一个向量是一个合适的机制,但你将不得不手动排序偏见的用户请求的数据。另一个想法是使用sqllite并让它管理存储排序和筛选数据。

+0

你的意思是log4cxx? log4cpp库似乎在2007年停止开发。 – vividos 2011-04-20 07:09:40

+0

是的。我记不起实际的名字,但log4cxx是apache项目。 – rerun 2011-04-20 07:21:12

+0

我正在使用log4cxx,但仅用于记录file.does log4cxx支持筛选的信息。 – 2011-04-20 08:35:11

0

实际响应将取决于使用模式和接口。如果您正在使用图形用户界面,那么很可能已经有一个小部件在某种程度上实现了该功能(可以按不同列排序,甚至过滤)。如果你真的想在UI之外实现它,那么它将取决于使用模式,用户是否希望特定的视图比其他视图更多?她只需要过滤,还是需要排序?

如果有在大多数情况下要使用的数据的一个视图,您只需要显示不同的顺序几次,我会继续元素的std::vectorstd::deque,并与remove_copy_if时过滤掉需要。如果需要不同的排序,我会复制并对副本进行排序,以避免不得不重新排序回到基于日志的时间点。请注意,如果您的应用程序不断推送您需要更新副本的新数据(或提供固定视图并定期重新运行该操作)的数据。

如果发生更经常比其他人,如果你不想去通过实施上述的疼痛没有特别的看法,看看升压多指数容器。他们使用不同的标准保持同一数据的同步视图。在最后一种情况下,这可能是最有效率的,即使它在统治观点的一般情况下可能效率较低,它可能使事情变得更简单,因此它仍然值得。