到目前为止,我开始在工作中使用MongoDB.我想知道MongoDB如何处理并发更新?我已经读过MongoDB中没有锁定功能,所以我想知道处理这个问题的常用做法是什么.
谢谢.
我正在使用官方C#驱动程序来执行FindAll并升级到新的驱动程序2.0.FindAll已过时,将替换为Find.我试图转换一个简单的方法,返回一个列表Class1.无法在文档中找到使用POCO的实际示例
var collection = database.GetCollection<ClassA>(Collection.MsgContentColName);
return collection.FindAll().ToList();
有人可以帮我转换2.0驱动程序并返回列表而不是任务吗?
结果:
如果您正在对容错的数据集进行操作,或者执行一次性过程,则可以进行验证,将WriteAcknowledge更改为Unacknowledged可以提供帮助.
此外,默认情况下批量操作是IsOrdered,我不知道.将此设置为False实际上会使操作批量执行,否则它将作为一个更新线程运行.
MongoDB 3.0/WiredTiger/C#驱动程序
我有一个147,000,000个文档的集合,其中我每秒钟(希望)大约会执行更新.3000个文件.
以下是更新示例:
"query" : {
"_id" : BinData(0,"UKnZwG54kOpT4q9CVWbf4zvdU223lrE5w/uIzXZcObQiAAAA")
},
"updateobj" : {
"$set" : {
"b" : BinData(0,"D8u1Sk/fDES4IkipZzme7j2qJ4oWjlT3hvLiAilcIhU="),
"s" : true
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个典型的更新,我的要求是以每秒3000的速度插入.
不幸的是,这些花费的时间是原来的两倍,例如最后一次更新是针对1723个文档,并且需要1061ms.
该集合仅在_id上有索引,没有其他索引,并且该集合的平均文档大小为244字节,无上限.
服务器有64GB内存,12个线程.插入性能非常好,收集尺寸较小,比如大约5000万,但是大约有8000万之后真正开始下降.
可能是因为整套不在内存中吗?数据库由RAID0 SSD支持,因此IO性能不应成为瓶颈,如果它应该在一开始就显示出来?
我会相信一些指导,因为我相信MongoDB可以满足我的相当微薄的要求,而不是它所使用的一些应用程序.数据库没有大量的读取率,因此Sharding不会改善问题,尽管可能我错了.
无论哪种方式,当前的插入率都不够好.
更新:这是查询的解释()...
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "Collection",
"indexFilterSet" : false,
"parsedQuery" : {
"_id" : {
"$eq" : { "$binary" : "SxHHwTMEaOmSc9dD4ng/7ILty0Zu0qX38V81osVqWkAAAAAA", "$type" : "00" }
}
},
"winningPlan" : {
"stage" : "IDHACK"
},
"rejectedPlans" : []
},
"executionStats" : …Run Code Online (Sandbox Code Playgroud) 在C#中是否有任何方法可以检查MongoDB数据库中是否已存在具有特定名称的集合?
我想知道使用引用进行建模的最佳实践是什么情况.我正在使用MongoRepository库.
public class User : Entity
{
publis string Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public class Post : Entity
{
public string Id { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public DateTime Added { get; set; }
public User Owner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
存储帖子时我只想引用所有者(用户)对象而不是整个对象底层.
目前我这样做,不知道更好的方式......
var post = new Post …Run Code Online (Sandbox Code Playgroud) MongoDb C#Driver版本2.1的发布最近重新引入了该方法AsQueryable,但我很难找到一种异步调用它的方法.
使用Entity Framework可以实现,QueryableExtensions.ToListAsync但是我看不到使用MongoDb的等价物.
因此给出了一个存储库方法,例如:
public IQueryable<MyType> GetFiltered(Expression<Func<MyType, bool>> predicate)
{
return Database.GetCollection<MyType>(typeof(MyType).Name).AsQueryable().Where(predicate);
}
Run Code Online (Sandbox Code Playgroud)
我想做点什么
var myTypes = await MyRepository.GetFiltered(t => t.Id == 1).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
这可能吗?
现在我正在开发一个Web应用程序的原型,它聚合了来自大量用户的大量文本条目.必须经常显示此数据并经常更新.目前,我将内容存储在MySQL数据库中,并使用NHibernate ORM层与数据库进行交互.我有一个为用户,角色,提交,标签,通知等定义的表.我喜欢这个解决方案,因为它运行良好,我的代码看起来很好,理智,但我也担心MySQL将如何执行大小我们的数据库达到了很多.我觉得它可能很难以足够快的速度执行连接操作.
这让我想到了非关系型数据库系统,如MongoDB,CouchDB,Cassandra或Hadoop.不幸的是,我也没有经验.我在MongoDB上看过一些好评,看起来很有趣.我很乐意花时间学习如果一个人走的路.我非常感谢任何一个提供积分或问题时,没有关系dbms?
我正在探索Mongo作为关系数据库的替代方案,但我遇到了无模式集合概念的问题.
理论上听起来很棒,但只要将模型与集合绑定,模型就会成为您的事实模式.您不能再只是添加或删除模型中的字段,并希望它继续工作.我在这里看到了与管理关系数据库相同的问题,因为您需要某种类型的脚本从一个版本的数据库模式迁移到另一个版本.
我是从错误的角度接近这个吗?这里的成员采取了哪些方法来确保他们的收集项目在更新其域模型时与其域模型保持同步?
编辑:值得注意的是,这些问题在关系数据库中存在明显的为好,但我在使用无模式数据库和更具体蒙戈缓解这一问题专门询问策略.谢谢!
我第一次使用MongoDB.
我看过这个例子:
SELECT a,b FROM users WHERE age = 33 db.users.find({age:33},{a:1,b:1})
但我无法将其翻译成C#.谁能帮我?
我最近从已弃用的v1.9转移到了新的MongoDB C#驱动程序v2.0.
现在,当我序列化一个有字典的类时,我有时遇到以下情况BsonSerializationException:
MongoDB.Bson.BsonSerializationException:使用DictionaryRepresentation.Document时,键值必须序列化为字符串.
这是一个最小的重现:
class Hamster
{
public ObjectId Id { get; private set; }
public Dictionary<DateTime,int> Dictionary { get; private set; }
public Hamster()
{
Id = ObjectId.GenerateNewId();
Dictionary = new Dictionary<DateTime, int>();
Dictionary[DateTime.UtcNow] = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
static void Main()
{
Console.WriteLine(new Hamster().ToJson());
}
Run Code Online (Sandbox Code Playgroud) mongodb ×10
c# ×7
.net ×2
asp.net-mvc ×1
cassandra ×1
couchdb ×1
linq ×1
mysql ×1
nosql ×1
performance ×1