Perl DBI模块允许我透明地连接到许多不同类型的SQL数据库.是否存在用于非关系键值对数据库的等效Perl模块?
例如,一个接口,可以让我先用BerkeleyDB的(甚至只是一个Perl哈希?)开发,但切换到像memcachedb或CouchDB的,甚至是云数据库像亚马逊SinmpleDB或谷歌的AppEngine数据存储提供的服务.
(这是Tie :: Hash的作用吗?在这种情况下,我在哪里可以找到实现的摘要?)
假设我正在编写一个日志分析应用程序.主域对象是LogEntry.此外.应用程序的用户定义了一个LogTopic,它描述了他们感兴趣的日志条目.当应用程序接收日志条目时,它会将它们添加到couchDB,并根据系统中的所有LogTopics检查它们,看它们是否与主题中的条件匹配.如果是,则系统应记录该条目与主题匹配.因此,LogEntries和LogTopics之间存在多对多关系.
如果我将它存储在RDBMS中,我会做类似的事情:
CREATE TABLE Entry (
id int,
...
)
CREATE TABLE Topic (
id int,
...
)
CREATE TABLE TopicEntryMap (
entry_id int,
topic_id int
)
Run Code Online (Sandbox Code Playgroud)
使用CouchDB我首先尝试只有两种文档类型.我有一个LogEntry类型,看起来像这样:
{
'type': 'LogEntry',
'severity': 'DEBUG',
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个LogTopic类型,看起来像这样:
{
'type': 'LogTopic',
'matching_entries': ['log_entry_1','log_entry_12','log_entry_34',....],
...
}
Run Code Online (Sandbox Code Playgroud)
您可以通过使用matching_entries每个LogTopic文档中的字段来存储LogEntry文档ID列表来查看我表示关系.这在某种程度上可以正常工作,但是当多个客户端都试图向主题添加匹配条目时,我遇到了问题.两者都尝试乐观更新,一个失败.我现在使用的解决方案是基本上重现RDBMS方法,并添加第三种文档类型,如:
{
'type':'LogTopicToLogEntryMap',
'topic_id':'topic_12',
'entry_id':'entry_15'
}
Run Code Online (Sandbox Code Playgroud)
这工作,并通过并发更新问题,但我有两个保留:
任何人都有更好的解决方案吗?如果我也发布了我正在使用的观点会有帮助吗?
我想开始使用非关系型数据库,但想要一些与Rails一起使用的东西.我正在考虑文章中的那些并倾向于Voldemort或CouchDB:
http://www.ithighlight.com/2009/07/list-of-companies-powered-by-non-relational-database/
有什么建议?
我想尝试/玩非关系数据库,如果解决方案是:
你能为我推荐什么?
基本上,我希望能够在我没有用户权限的共享linux服务器上安装此系统.
对于基于Erlang,Python的新应用程序,我们正在考虑尝试非RDBMS数据库(仅仅是为了它).我研究过的一些数据库是Mongodb,CouchDB,Cassandra,Redis,Riak,Scalaris.这是一个简单要求的列表.
我只是在寻找非RDBMS数据库的起点.有什么建议?
我有一个与数据库相关的一般问题。它更具体地说明了如何处理关于 MongoDB 的集合。
假设我有一个 Parent 集合。然后我有一些除了父级之外的子级集合。它们每个都有单独的模式。目前,它们作为单独的集合存在于数据库中。
我通过将 parentId 属性添加到每个子文档来处理链接。
IE
Some_Child = {
"parentId" : "some_id",
rest_of_schema
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好。但是,我注意到我现在每次需要 Child 数据时都必须处理两个集合。这会导致更多的代码。即多次订阅,每次我只想对 Child 做一些事情时,都会调用 DB 调用。
关于以这种方式构建数据与在每个父文档上仅拥有一组 Childs 相比,您有什么想法?
IE
Some_Parent = {
"Childs" : [
{child1},
{child2},
{childN}
],
Rest_Of_Schema
}
Run Code Online (Sandbox Code Playgroud)
我对此的担忧是它是面向未来的。假设如果 Child 需要更多的数据和功能......那么父文档最终可能会变得非常大和混乱。此外,一般来说,抽象出这两个集合可能会更清晰。
通常,(在 RDMS 中),我什至不会考虑使用选项 #2。所以我只是想知道这是否是文档存储、MongoDB(以及一般的非关系 DBMS)的可接受模式。
任何见解?
我刚刚开始学习使用yii,并且已经设法做了一些基本的东西.
假设我有两个简单的表:"用户"和"项目",其中关系是1到多(一个用户可以有很多项目)
我使用GII生成了CRUD,但是在"创建/编辑用户页面"中,这不提供下拉列表,而只提供我需要输入用户ID的文本字段.
在编辑项目时,我想有一个下拉列表,我可以在其中选择一个用户(因此该元素应该显示一个用户名列表).
我假设GII无法为此生成控制器和查看代码
这样做的最佳做法是什么?
我已按照http://www.yiiframework.com/doc/guide/1.1/en/database.arr中的说明声明了这些关系
public function relations()
{
return array(
'projects_rel'=>array(self::BELONGS_TO, 'Users', 'user_id'),
);
}
Run Code Online (Sandbox Code Playgroud)
和
public function relations()
{
return array(
'users_rel'=>array(self::HAS_MANY, 'Projects', 'project_id'),
);
}
Run Code Online (Sandbox Code Playgroud)