设计通用非结构化数据存储

时间:2010-12-17 09:51:28

标签: sql-server database-design data-structures

我获得的项目是存储和检索来自第三方的非结构化数据。这可能是人力资源信息 - 用户,图片,简历,语音邮件等或工厂相关的东西 - 工作项目,零件清单,时间表等基本上几乎任何类型的数据。

其中一些项目可能会被链接,因此用户很多都有图片。我不需要检查数据的内容,因为我的存储解决方案将以XML格式接收数据并将其作为XML发送出去。接收者将XML转换回图片或声音文件等。收件人可以请求所有用户,因此我需要能够找到用户记录及其相关的“子”项目,如图片等,或者收件人可能只想要图片等。

我的数据库是MS SQL,我必须坚持下去。我的问题是,是否存在以这种方式处理非结构化数据的任何模式或现有解决方案。

我已经做了一些谷歌搜索,发现一些网站谈论这类问题,但他们更感兴趣的是深入挖掘数据以允许搜索他们的内容。我不需要知道内容的类型(图片,用户,工作表等)。


对于那些发表意见的人:

我面临的问题是将对象链接在一起。可以将用户对象添加到数据存储,然后可以在以后添加用户图片。当请求用户时,我将需要返回User对象及其关联的Picture。用户可以更新他们的图片,以便您可以看到我需要保持对象之间的关系。这就是我在第二段中试图理解的内容。我遇到的问题是我的解决方案必须非常通用,因为我应该能够存储任何内容并根据最终用户的要求链接这些对象。 EG:用户,图片和电子邮件或工作项,零件清单等。我看到微软开发了ZEntity,看起来它可能有用,但我不需要深入研究数据内容,所以它可能因为我需要的东西而被淘汰

5 个答案:

答案 0 :(得分:1)

由于您处理XML,因此它不是非结构化数据。 Microsoft SQL Server 2005或更高版本具有您可以使用的XML列类型。

现在,如果您不需要访问XML节点而您认为自己永远不需要,请使用普通varbinary(max)。为了您的信息,将XML内容存储在XML类型列中,不仅可以直接通过数据库查询检索XML节点,还可以验证 XML数据以防止模式,这可能有助于确保内容你的商店是有效的。

如果您的XML数据增长(2MB +),请不要忘记使用FILESTREAM(SQL Server 2008或更高版本)。这可能是你的情况,因为语音邮件或图片很容易大于2 MB,特别是当它们在XML文件中进行Base64编码时。

答案 1 :(得分:1)

由于您的数据非常自由和可变,因此最好将其放在普通的旧文件系统而不是关系数据库上。通过各种方式将一些元信息存储在SQL中,在这里搜索结构化数据关系是有意义的,但如果您的主要数据内容没有使用数据关系构建,那么您使用SQL数据库本身就是一种损害。

文件系统快速查找文件并对其进行流式传输,尤其是在这是一个Intranet应用程序时。您需要做的就是共享一个文件夹并应用合理的文件权限,大量不必要的开发消失了。如果您需要通过Web提供此功能,请考虑将WebDAV与IIS一起使用。

一个相当聪明的文件和目录命名范围与您编写的一小部分软件,以帮助人们走上正确的道路将会放弃,始终击败任何SQL数据库以获得访问速度和顺序数据流。文件系统路径和文件名将始终击败任何聪明的SQL索引以获得数据位置速度。普通的旧文件是最终的非结构化,灵活的数据存储。

使用SQL来获得它的好处。使用文件来获取它们的好处。这项工作的最佳工具以及所有......

答案 2 :(得分:1)

自版本1以来,我一直在使用Microsoft Zentity,虽然它非常出色,可以存储大量结构化数据并允许(相对)简单地访问数据,如果您的数据结构可能会发生变化,那么重新创建“数据模型”(和回归测试)可能会消除使用这种系统的好处。

值得注意的另一点是,Zentity需要文件流存储,因此您需要安装正确版本的SQL Server(我认为是2008)并启用文件流存储。

答案 3 :(得分:0)

您并不需要此实现的任何模式。将所有数据存储在BLOB条目中。需要时从中读取,然后再将其发送出去。

Yo可能需要调查其他基础架构方面,例如定期清理数据库以删除过期的条目。

也许我不清楚这个问题。

答案 4 :(得分:0)

如果我说你需要存储的所有内容都是一个xml的blob,并且包含在其中的任何二进制信息,那么我是对的吗?为什么你不能拥有一个用户表,然后是一个带有userobjects的链接(外键)表,由userId链接?