2

我们创建了一个 java 代理,它检查我们的应用程序套件,以查看例如父/子结构是否仍然正确。因此,它需要在多个应用程序中检查 8000 多个文档。

检查本身进行得非常快。我们使用导航器从视图中检索数据,并且只从这些条目中读取数据。问题在于我们的日志记录机制。每当我们报告具有 SEVERE 级别的日志条目(又名:一个真正的大问题)时,后端文档都会直接更新。这是因为我们不想丢失有关这些问题的任何信息。

在我们的测试运行中,我们看到一切运行顺利,但是一旦我们“创造”了很多严重的问题,性能就会因为所有的写入而大幅下降。我想看看是否有任何笔记开发人员面临同样的挑战。我们如何在不丢失任何数据的情况下加快编写速度?

-- 在 simon 评论后添加了更多信息 --

它是一个每天晚上运行以检查不一致的预定代理。目标当然是找到不一致并解决原因,最终完全没有任何不一致的报告。

4

3 回答 3

2

它是一个每天晚上运行以检查不一致的预定代理。

好的。所以有很多因素需要考虑。

  1. 是否有任何嵌入式罐子?当代理嵌入 jar 时,服务器必须先将它们从代理分离到磁盘,然后才能运行代码。每次代理执行时都会这样做。这可能会影响性能。如果您的代理生成多次,请删除嵌入的 jar 并将它们放入服务器上的 lib\ext 文件夹中(需要重新启动服务器)。

  2. 你提到它在晚上运行。默认情况下,一般内务处理流程在夜间运行。检查已安排的服务器任务的注释 ini,并评估它们在运行时对服务器/代理的影响。例如:

    ServerTasksAt1=Catalog,Design
    ServerTasksAt2=Updall
    ServerTasksAt5=Statlog
    

    在这种情况下,如果在 2-5 之间运行,则 UPDALL 可能会对其产生影响。还要检查计划文件的计划执行。

  3. 你用什么方式写作?如果您为每个事件创建一个文档并且文档内容不多,那么编写时间应该是合理的。可能会影响性能的是以下之一。

    • 如果您对这些写入进行多线程处理。
    • 拉出一个日志文档,添加一行,保存然后重复。

最后一件事要考虑。如果您收到 3000 个错误,一定有一个点 X 数量的错误意味着没有继续的意义,而是通过 SNMP/电子邮件/等提醒管理员?也可能值得编码。

除此之外,您可能应该发布一些与写入相关的示例代码。

于 2013-01-24T10:18:09.167 回答
1

嗯,困难或一般的问题。据我了解,您更新了正在浏览的视图中的文档。我会设置view.AutoUpdate为假。这可确保在您运行代码时不会重新加载视图。这应该加快你的代码。

这是来自 Designer 帮助的摘录:

通过将 AutoUpdate 显式设置为 False 来避免自动更新父视图。自动更新会降低性能并可能使导航器中的条目无效(“在索引中找不到条目”)。您可以根据需要使用 Refresh 更新视图。

希望有帮助。
如果这没有帮助,您可能需要发布代码片段或更多详细信息。

于 2013-01-24T10:05:31.023 回答
0
  1. 为每个错误创建单独的文档,而不是一个巨大的文档。

或者

  1. 直接写入文本文件而不是数据库,然后在必要时将其拉入文档。这应该会大大加快速度。
于 2013-01-29T09:04:36.290 回答