Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MongoDB模式设计、合并、合并用户特定字段和默认字段_Sql_Mongodb_Join_Couchdb_Nosql - Fatal编程技术网

Sql MongoDB模式设计、合并、合并用户特定字段和默认字段

Sql MongoDB模式设计、合并、合并用户特定字段和默认字段,sql,mongodb,join,couchdb,nosql,Sql,Mongodb,Join,Couchdb,Nosql,鉴于: 一个对象数据库,每个对象都有一个默认的搜索顺序权重(可能是一个通用的流行度评级) 当每个用户使用这些对象时,将为每个项目存储用户对搜索顺序的个人权重(使用任何算法,例如使用频率等) 在SQL中,通过连接对象和用户对象表并按照 select ... coalesce(user_objects.personal_weighting, objects.default_weighting) as sort_key order_by sort_key 换句话说,用户可以搜索对象的整个数

鉴于:

一个对象数据库,每个对象都有一个默认的搜索顺序权重(可能是一个通用的流行度评级)

当每个用户使用这些对象时,将为每个项目存储用户对搜索顺序的个人权重(使用任何算法,例如使用频率等)

在SQL中,通过连接对象和用户对象表并按照

select ... coalesce(user_objects.personal_weighting, objects.default_weighting) 
    as sort_key order_by sort_key
换句话说,用户可以搜索对象的整个数据库(比如说歌曲)。如果存在用户以前从未与之交互过的对象(他们从未听过的歌曲),则该对象的搜索顺序权重基于为每个对象存储的默认值。如果用户已与对象交互,则该对象的搜索顺序权重基于特定用户的权重,超过默认值

在MongoDB中有没有有效的建模方法?在CouchDB中使用map/reduce将非常容易,而且性能也很好,因为map/reduced视图中存储了索引,但我还没有弄清楚如何在MongoDB中很好地实现这一点


有什么想法吗?

我认为唯一可以让它可扩展的方法是:

为每个用户创建一个单独的集合,其中只包含访问对象的权重。添加索引。然后从此集合中检索顶部加权的ObjectId+权重。从原始集合中获取顶级权重元素的ObjectId+权重。合并这两个列表并最终检索所需的元素


所有查询都编制了索引,因此这应该很快。结果集的分页代码更为复杂(合并步骤),如果用户希望检查超出范围,则无法快速工作。。比如说第50页左右(就像谷歌那样禁用它)。

我认为唯一可以让它可扩展的方法是:

为每个用户创建一个单独的集合,其中只包含访问对象的权重。添加索引。然后从此集合中检索顶部加权的ObjectId+权重。从原始集合中获取顶级权重元素的ObjectId+权重。合并这两个列表并最终检索所需的元素


所有查询都编制了索引,因此这应该很快。结果集的分页代码更为复杂(合并步骤),如果用户希望检查超出范围,则无法快速工作。。比方说第50页左右(就像谷歌那样禁用它)。

因为你不能为这些查询创建索引,这将是一个完整的表扫描。。。这是脱机处理还是交互式查询?联机数据库。用户对标题进行全文搜索。FTS在对象和用户对象上运行;结果由对象id连接并按权重排序(默认或特定)。在SQL或CouchDB中,它既简单又快速,但我对MongoDB感到困惑。大多数其他数据符合文档数据库结构。这个数据库将不断增长(与对象的每次交互都记录在一个单独的日志中,因此我不再使用CouchDB,因为我已经读到,随着视图的增大,CouchDB的速度会大大降低。我可以在Mongo中使用map/reduce来实现这一点,但没有索引……慢。我一定缺少一个优雅的模式设计。因为您无法为这些查询创建索引,所以这不会发生。)o全表扫描…这是脱机处理还是交互式查询?联机数据库。用户对标题进行全文搜索。FTS在对象和用户对象上运行;结果由对象id连接并按权重排序(默认或特定).在SQL或CouchDB中,它既简单又快速,但我对MongoDB感到困惑。大多数其他数据都符合文档数据库结构。该数据库将不断增长(与对象的每次交互都记录在一个单独的日志中,因此我不再使用CouchDB,因为我已经读到,随着视图的增大,CouchDB的速度会大大降低。我可以在Mongo中以map/reduce的形式进行此操作,但没有索引…速度慢。我一定缺少一个优雅的模式设计。谢谢你,伙计。假设加权算法有效,它是正确的。)用户不太可能经常深入搜索结果页面(希望在全文搜索之后不会太长)。我一直在考虑这些问题,但我不太确定是否要在MongoDB中合并结果集。这是客户端最好的做法吗?我注意到“合并”作为最近添加到MongoDB的一个函数,但我在文档中看到的引用是spartan。是的,您必须在客户端处理合并。我还没有听说过关于这个新的“合并”功能的任何信息。{merge:“collectionName”}-此选项将新数据合并到旧的输出集合中。换句话说,如果结果集和旧集合中都存在相同的键,则新键将覆盖旧键。不太确定它是否相关。我倾向于只保留Postgres。至少这是一个已知数量。我与性感的nosql dbs调情,但至少现在感觉不太对劲。有了CouchDB的索引视图,这是非常正确的,但是对于一个不断增长的db来说,性能似乎不太确定……啊……我知道这个选项。事实上我使用它:)这是不相关的。NoSQL解决方案都有它们的优点。它们只适用于特定的用途,但在这方面它们确实比其他任何东西都好。调情是好的。稍后你可能会看到一些要求,然后离开。“我知道Mongo很好”谢谢,伙计。假设加权算法是有效的,用户不太可能经常深入搜索结果页面(希望在全文搜索之后不会太长)。我一直在考虑这些问题,但我不太确定是否要在MongoDB中合并结果集。这是客户端最好做的事情吗?我注意到“合并”是MongoDB最近添加的一个函数,但我在文档中看到的引用是斯巴达式的。是的,你必须在客户端处理合并。我没有听说过关于这个新功能的任何消息“合并”功能..但{merge:“集合”