gpt4 book ai didi

java - 在数据库之前处理数据的应用程序设计

转载 作者:行者123 更新时间:2023-12-04 14:45:49 24 4
gpt4 key购买 nike

我在 excel 文件(和 csv 文件)中收集了大量数据。数据需要放入数据库(mysql)。但是,在进入数据库之前,需要对其进行处理。例如,如果第 1 列小于第 3 列,则将 4 添加到第 2 列。在保留信息之前必须遵循许多规则。

完成此任务应遵循的良好设计是什么? (使用java)

附加说明

该过程需要自动化。从某种意义上说,我不必手动进入并更改数据。我们谈论的是数千行数据,每行 15 列信息。

目前,我已经建立了一种责任链设计。每个规则一个类(Java)。完成一个规则后,它会调用以下规则。

更多信息

通常每个数据表大约有 5000 行。速度不是一个大问题,因为这种大量输入并不经常发生。

我考虑过 drools,但是我不确定这个任务对于 drools 来说是否足够复杂。

示例规则:

  1. 所有货币(特定列中的数据)不得包含货币符号。

  2. 品类名称必须统一(如book case = bookcase)

  3. 进入日期不能是 future 的日期

  4. 文本输入只能包含[A-Z 0-9\s]

等..
此外,如果任何信息列无效,则需要在以下情况下报告处理完成(或者可能停止处理)。

我目前的解决方案有效。但是我认为还有改进的余地,所以我正在寻找 关于如何改进它或其他人如何处理类似问题的理想情况。

我考虑过(非常简短地)使用 drools,但我不确定工作是否足够复杂以利用 drools。

最佳答案

如果我不想一步完成(正如 Oli 提到的那样),我可能会使用 pipe and filters设计。由于您的规则相对简单,我可能会做几个基于委托(delegate)的类。例如(C# 代码,但 Java 应该非常相似......也许有人可以翻译?):

interface IFilter {
public IEnumerable<string> Filter(IEnumerable<string> file) {
}
}

class PredicateFilter : IFilter {
public PredicateFilter(Predicate<string> predicate) { }

public IEnumerable<string> Filter(IEnumerable<string> file) {
foreach (string s in file) {
if (this.Predicate(s)) {
yield return s;
}
}
}
}

class ActionFilter : IFilter {
public ActionFilter(Action<string> action) { }

public IEnumerable<string> Filter(IEnumerable<string> file) {
foreach (string s in file) {
this.Action(s);
yield return s;
}
}
}

class ReplaceFilter : IFilter {
public ReplaceFilter(Func<string, string> replace) { }

public IEnumerable<string> Filter(IEnumerable<string> file) {
foreach (string s in file) {
yield return this.Replace(s);
}
}
}

从那里,您可以直接使用委托(delegate)过滤器,或将它们子类化以获取具体细节。然后,将它们注册到将通过每个过滤器传递它们的管道。

关于java - 在数据库之前处理数据的应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/194194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com