代码之家  ›  专栏  ›  技术社区  ›  AtliB

NoSql用于将SOAP请求保存到DB以进行审核日志记录,然后进行查询?

  •  3
  • AtliB  · 技术社区  · 14 年前

    目前,我们正在将所有SOAP请求保存到一个日志文件中(滚动,每天一个)。当我收到一个关于谁做了什么,什么时候,多久做一次等的请求时,我需要求助于繁重的文本操作来提取这些信息。我的想法是将这些SOAP请求保存到一个数据库中,在那里我可以执行一些查询。

    SOAP请求由头和信封组成。标头中是调用该操作的用户的用户名。在信封的主体中,第一个元素是WS-method名称,后面是方法的所有参数。每个WS方法显然有不同的参数:

      • 信封
        • 收割台
          • 用户名=XXX
        • 身体
          • WS名称
            • WS参数(方法之间不同,层次结构)

    我想构造这样的查询而不需要太多困难:

    • 显示对WS XXX的所有请求,其中WS的特定参数是YYY(例如,每次调用partyId=123的“changeParty”)

    这是否适合于“数据库的文档存储类型”/NoSQL,比如CouchDB/MongoDB?这会很难设置吗?有其他的建议/建议/想法吗?

    编辑:

    • 在大多数情况下,我认为我可以使用索引:user、WS method、requestDate。任何其他字段可能都不会被索引(尽管我会对它们进行一些过滤)。因为它只用于审计目的,所以它不必像闪电一样快。
    • 我在考虑将NoSql服务器放在我们现有的monster应用服务器上,让“真正的底层”数据库(DB2)脱离任何类型的日志记录,因为它的使用量相当大。
    4 回复  |  直到 14 年前
        1
  •  3
  •   Will Hartung    14 年前

    好吧,特别是关于Couch和Mongo,您必须处理的第一个问题是在一些相关的JSON负载中转换soapxml负载,因为这是这些DBs所理解的。

    接下来,这些数据库中的大多数都要求您在初始设计期间,以及理想情况下在开始向它们加载数据之前,很好地了解希望从它们中进行哪些查询。对于现有数据集,尤其是大型数据集,添加新索引的成本可能会很高。

    这都是非常可行的,但是您想从您的头脑中摆脱任何像RDBMS中那样的“特殊”查询的概念。它们在NoSQL系统中通常表现不好。

    最后,由于您已经必须将数据从XML转换为JSON,因此最好从SOAP请求中提取“感兴趣的字段”,即您要查询的字段,然后简单地填充您自己的索引字段和行,并将数据存储在您(我假设)已经存在的SQL数据库中。

    编辑以供评论:

    也就是说,您可以简单地提取您关心的一些信息,而不是对整个文档进行整理。在这种情况下,你必须把你感兴趣的所有东西都打包,包括过滤。

    { "user":"Bob",
      "methodName" : "helloWorld",
      "soapDate" : "2010-09-01 12:23:45",
      "soapRequest" : "...escaped XML goes here..."
    }
    

    然后您可以根据JSON文档中公开的任何内容构建视图或索引。您将无法(轻松地)从原始SOAP请求中查询任何内容。只有专门提取并放入JSON负载中的元素才能通过DB轻松访问。

    我的基本观点是,tho,如果您必须通过任何编组过程来转换数据并为数据库做好准备,那么您最好使用您已经知道并且在您的公司得到支持的数据库(即可能是您现有的RDBMS),而不是通过添加新的DB向堆栈中引入另一块砖块。

    但是在大多数现代RDBMS中,您可以轻松地创建一个或多个表来处理这些数据。

        2
  •  1
  •   John Saunders    14 年前

    XML 作为本机数据类型。可以将SOAP请求和响应作为类型的列存储在数据库中 XML格式

        3
  •  0
  •   Robin    14 年前

    为什么是nosql?例如,如果您使用Postgres,您可以使用一个简单的insert触发器将XML有效负载和提取的数据块转储到XML字段中,以将您想要的数据直接提取到DB中。你可以有这样一张桌子:

    create table soaps (
      payload text,
      user int,
      method_invoked char,
      .. etc ..
    );
    

    我相信其他SQL数据库也可以做到这一点。

    我能看到使用无SQL解决方案的唯一原因是如果您有大量的数据。无论哪种方式,您都可能需要一些数据生命周期管理工具来归档旧数据。

        4
  •  0
  •   eglasius    14 年前

    如果在.net或java的对象实例中加载了这些数据: db4o型

    如果是xml格式的,我会使用一些直接支持它的东西。我认为SQLServerExpress是这样的。