没有架构时如何存储数据?

时间:2011-04-20 12:54:13

标签: database database-design architecture

我正在试图找出我正在启动的项目中正确的数据存储选择。

我想存储作为powershell脚本输出结果的数据。这意味着我的应用程序的管理员将能够编写将在多个主机上执行的powershell脚本,并将结果发布回数据存储。然后我想以灵活的方式查询该商店。

让我澄清一下。从powershell作业返回的数据不是正确的对象,而是对象属性的键/值集合。所以没有真正的序列化对象。

假设我通过WCF服务告诉100个主机执行两个powershell命令Get-Service和Get-Process,然后他们将结果发回我的数据存储。我事先并不知道这些数据的架构。

关键不是PowerShell,也不是WCF,但是如何存储存储架构时的数据是未知的。然后,将根据已存储的数据通过某些GUI手动创建查询。

之后我希望能够执行一个查询,例如“获取运行服务X且运行Y的所有主机的列表”?

我正在研究nosql数据库作为关系数据库的替代方案,但不确定什么是最好的。

感谢任何输入。 /莱纳斯

2 个答案:

答案 0 :(得分:1)

如果将数据作为XML存储到RDBMS对你没有意义(顺便说一下,为什么不呢?),那么有几个NoSQL DB可能是不错的选择,因为它们是无模式的。

我可以推荐的那些(基于个人经验,还有许多其他可能相关的)是CouchDB和Riak。两者都提供了磁盘绑定键值数据存储,您可以将值存储为JSON,而不预先定义模式。在这两种情况下,都可以使用Javascript通过RESTful接口查询数据。

选择应取决于您期望的数据量:

  • Riak旨在在多个节点上运行,并且通过MapReduce处理查询,以便在这些节点之间分配处理,从而实现相对快速的数据检索以进行即席查询。如果您有大量数据 - 必须运行即席查询的数百万条记录,请选择此选项。虽然我可以证明Riak让它变得相对轻松,但你会“支付”管理群集的额外复杂性。
  • CouchDB旨在在单个节点上运行。复制是可能的(并且很容易),但查询针对单个服务器运行。它具有物化指数,因此对现有指数的查询运行速度很快。即席查询需要完整的“表扫描”,并且可能需要几分钟才能完成大型数据集。 OTOH,它具有Riak在免费版中缺少的基于浏览器的良好用户界面的好处。

我建议先尝试Couch - 设置并开始玩很容易 - 看看它是否能解决你的问题。如果没有,那就去Riak。

答案 1 :(得分:0)

如果您想在设计时存储您不了解结构的数据,可以选择几种方式。

其中包括:

将数据存储为xml(在数据库或文件中)。

动态创建架构以匹配动态数据的结构。

创建一个通用结构化架构,其中所有类都映射到同一个表,所有属性都是动态附加属性。

E.g。 (通用类结构)

GenericClass
{
    GenericProperty[] SimpleProperties;
    Dictionary[string, GenericClass] ComplexProperties;
}

GenericProperty
{
    String Name;
}

StringProperty: GenericProperty
{
    String Value;
}

IntegerProperty: GenericProperty
{
    Integer Value;
}

在这些类上使用table-per-type应该为您提供通用表。