【问题标题】:Display large result set显示大型结果集
【发布时间】:2010-10-23 17:14:48
【问题描述】:

这是我的问题:我需要存储 很多 条日志消息,并认为将其保存在 SQLite3 数据库中以便能够轻松搜索和过滤它是明智之举。

我将在标准列表小部件中显示日志消息(使用 wxWidgets)。该列表将包含多个列,并且可以由用户进行排序和过滤。

现在,我不确定处理此问题的最佳方法是什么。我正在考虑一些可能的解决方案:

  1. 将所有消息读入内存。当有新的或更改的日志消息(在列表中的随机位置)时,必须刷新整个列表。当用户想要过滤列表或在不同的列上排序时也是如此。
  2. 将所有 ID 读入一个数组并按需检索完整的日志消息(当用户滚动列表以使其可见时)。
  3. 使用 SQL 接口按需获取结果,使用 SQL 选择所需的确切子结果。

但实际上,我只是不习惯处理这种问题,所以感谢任何提示!

【问题讨论】:

  • 确保在虚拟模式下使用 wxListCtrl,或者(使用 wxWidgets 主干时)使用 wxDataViewCtrl。
  • 我正在使用 wxDataViewCtrl。这个问题与如何实现模型更相关。

标签: sql sqlite dataset wxwidgets


【解决方案1】:

使用分页怎么样?

SELECT *
FROM logs
WHERE ...
ORDER BY ...
LIMIT offset, count

其中 offset 和 count 是您可以选择的值。您可以使用它来获取任意数量的日志条目。然后添加一个下一步按钮以允许用户查看下一页条目。结合过滤和排序的能力,日志搜索再简单不过了。

【讨论】:

  • 这就是我在网页上所做的,但在列表中似乎并不那么自然。我认为用户应该能够通过滚动条访问整个数据集。
  • 然而,这让我想到:我可以使用不同的滚动位置作为页面,这样我总是在内存中保留 1.000 个条目,当用户滚动超出该范围时,我会加载一个新集合。跨度>
  • 如果您有很多日志消息,那么在一个窗口中显示它们是不切实际的。我不确定如何在 wxWidgets 中实现它。但是,例如,当用户向下滚动时,您可以加载更多日志消息。
【解决方案2】:

开始写这篇文章作为对 Nadia 答案的评论,但我开始胡言乱语,而且太长了 :)

请记住,随着日志条目的数量变得非常多,滚动条将变得无用。滚动中最微小的移动最终会在列表中剧烈移动。这使得用户使用它来搜索列表是不切实际的。

想想为什么用户实际上会浏览这些条目并围绕它进行设计。非常大的列表不仅难以在代码中使用,而且用户也难以使用。我可能会给他们一些过滤条件和分页结果。

【讨论】:

  • 我会给他们过滤、搜索和排序结果的可能性,但在最坏的情况下(用户选择查看全部)我不希望应用程序崩溃。我将采用上述线性分页结果解决方案。
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2023-04-05
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多