我正在试图找出我正在启动的项目中正确的数据存储选择。
我想存储作为powershell脚本输出结果的数据。这意味着我的应用程序的管理员将能够编写将在多个主机上执行的powershell脚本,并将结果发布回数据存储。然后我想以灵活的方式查询该商店。
让我澄清一下。从powershell作业返回的数据不是正确的对象,而是对象属性的键/值集合。所以没有真正的序列化对象。
假设我通过WCF服务告诉100个主机执行两个powershell命令Get-Service和Get-Process,然后他们将结果发回我的数据存储。我事先并不知道这些数据的架构。
关键不是PowerShell,也不是WCF,但是如何存储存储架构时的数据是未知的。然后,将根据已存储的数据通过某些GUI手动创建查询。
之后我希望能够执行一个查询,例如“获取运行服务X且运行Y的所有主机的列表”?
我正在研究nosql数据库作为关系数据库的替代方案,但不确定什么是最好的。
感谢任何输入。 /莱纳斯
答案 0 :(得分:1)
如果将数据作为XML存储到RDBMS对你没有意义(顺便说一下,为什么不呢?),那么有几个NoSQL DB可能是不错的选择,因为它们是无模式的。
我可以推荐的那些(基于个人经验,还有许多其他可能相关的)是CouchDB和Riak。两者都提供了磁盘绑定键值数据存储,您可以将值存储为JSON,而不预先定义模式。在这两种情况下,都可以使用Javascript通过RESTful接口查询数据。
选择应取决于您期望的数据量:
我建议先尝试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应该为您提供通用表。