我目前正在评估 Amazon SimpleDB。SimpleDB 非常灵活,因为它不必具有表(或域)模式。模式随着创建/更新命令的流入而演变。这一切都很好,但是当我使用建模工具(评估 MindScape LightSpeed)时,我需要预先设置模式,以便工具基于模式生成模型。我可以在 SimpleDB 中手工制作域,这确实有帮助,但为此我必须在域上执行至少一个创建操作。我正在寻找仅创建域模式的能力。有什么线索吗?
2 回答
SimpleDB 中没有模式。
这就是为什么 NoSQL 人建议在将范式转移到这些非关系数据存储之前“忘记”关系数据库的原因。
所以,你不能做你描述的事情。没有数据,就什么都没有。
虽然 SimpleDB 确实不支持模式,但如果您对数字数据或日期运行查询,保留一些类型信息变得至关重要*。大多数 NoSQL 产品都有查询和类型,或者无查询和无类型,但 SimpleDB 选择了查询和无类型。
因此,与主应用程序之外的任何工具集成将要求您:
- 将重复的类型信息存储在不同的地方
- 创建自己的简单模式系统来存储类型信息
选项 2 似乎要好得多,尽管有人提出了建议,但选择它并不意味着您“没有正确的想法”。
S3 可能是此数据的一个不错的选择,您可以将其保存在与您的域同名的文件中,并且可以使用与您的 SimpleDB 帐户相同的 AWS 凭证从任何地方访问它。
将数据存储为 attributename=formatname 的列表是我需要做的事情的范围。事实上,您可以将所有这些存储在您域中的一个项目中。唯一的问题是,这个特殊项目可能会无意中从您期望实时数据而不是类型信息的域查询中返回。
我不熟悉 MindScape LightSpeed,但这是我发现使用 SimpleDB 时有益的一般策略,如果产品能够在 S3 中加载/存储文件,那就更好了。
*注意:为了清楚起见,我不是在谈论重新发明轮子或尝试将 SimpleDB 用作关系数据库。我说的是数字数据必须使用零填充(到您选择的长度)和偏移值(取决于它是有符号还是无符号)存储,以便与 SimpleDB 的基于字符串的查询语言一起使用. 一旦你决定在你的应用程序中使用一种格式或一组格式,如果源代码工具、查询工具需要这些信息,那么将这些信息隐藏在源文件中并分散在源文件中将是愚蠢的、报告工具或任何其他代码。