gpt4 book ai didi

c# - 字典与数据库(Mysql)

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:17 26 4
gpt4 key购买 nike

这个问题之前已经被问过,但不是在多线程应用程序的上下文中。

因此给定一个单线程应用程序,字典将在 O(1) 时间内找到给定键的值。给定一个表(来自数据库)在“X”列上具有主键(簇索引),搜索具有列“X”上的键的关联元组将在 O(log n) 时间内找到该元组。加上字典的内存优势,字典无疑胜出。

给定一个高度并行(例如异步套接字服务器)的应用程序,该应用程序依赖于通用数据结构(即字典与数据库)来维护应用程序范围的状态信息(例如连接的用户),其中 50% 的访问是读取,大约 50%访问的百分比是更新/删除/插入,对我来说字典更好似乎并不那么明显。原因如下:

1) 要使字典线程安全并发访问,必须使用锁定机制。 lock() 将锁定整个字典并有效地一次只允许一个线程访问数据结构。即使使用 readerWriterLockSlim 也会在提升为 writeLock 时锁定整个字典。
2) 数据库在更新/删除/插入主键时提供行级锁定的好处。
3) 字典在内存中(更快)而数据库连接使用套接字(更慢)

所以问题是,关系数据库的继承行级锁定功能是否超过了内存中字典访问的好处?

最佳答案

保罗,这是个好问题。行级锁定功能胜过内存中字典访问的好处。与内存中的字典对象相比,关系数据库的许多附加功能允许其广泛使用。如果你想创建一个内存表以便使用 MySQL 更快地访问数据,你可以使用 MEMORY storage engine .

例如,仅从索引的基于日期的列中搜索基于日期的信息可能相当简单和快速。除此之外,关系数据库 - 取决于您使用的数据库 - 允许角色、用户、商业智能等的安全性。在字典对象上,您可以构建许多流行数据库中现成的所有功能。

经过良好调优的数据库可以处理数以千计的并发请求,多线程和不同的应用程序可以从中受益。所以在推出你自己的之前,我建议使用关系数据库引擎。与往常一样,您的里程可能会根据您希望解决的问题的复杂程度而有所不同。

关于c# - 字典与数据库(Mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25497396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com