MySQL:许多写入表的操作都会失败。坏主意?

MySQL:许多写入表的操作都会失败。坏主意?,mysql,database,Mysql,Database,我正在编写一个需要多次写入(每秒最多100次)的应用程序。我还打算经常阅读这张表格。然而,由于重复的键索引,我将进行的大多数写入实际上都会失败。这是有意的。失败的写入会消耗MySQL表资源吗?这种做法不好吗?失败的写入操作将消耗系统资源,因为需要查阅表索引以确定是否违反了约束。至于这是否是一种不好的做法——故意抛出大量预期会失败的写操作似乎有点不寻常,但另一方面,RDBMS的任务是存储、组织和检索数据。与先查询应用程序代码是否可以插入密钥,然后再插入密钥(您仍然需要检查RDBMS上的约束)相比,

我正在编写一个需要多次写入(每秒最多100次)的应用程序。我还打算经常阅读这张表格。然而,由于重复的键索引,我将进行的大多数写入实际上都会失败。这是有意的。失败的写入会消耗MySQL表资源吗?这种做法不好吗?

失败的写入操作将消耗系统资源,因为需要查阅表索引以确定是否违反了约束。至于这是否是一种不好的做法——故意抛出大量预期会失败的写操作似乎有点不寻常,但另一方面,RDBMS的任务是存储、组织和检索数据。与先查询应用程序代码是否可以插入密钥,然后再插入密钥(您仍然需要检查RDBMS上的约束)相比,数据库尝试插入违反唯一约束且失败的
要快得多.

失败的写入将消耗系统资源,因为需要查阅表索引以确定是否违反了约束。至于这是否是一种不好的做法——故意抛出大量预期会失败的写操作似乎有点不寻常,但另一方面,RDBMS的任务是存储、组织和检索数据。与先查询应用程序代码是否可以插入密钥,然后再插入密钥(您仍然需要检查RDBMS上的约束)相比,数据库尝试插入违反唯一约束且失败的
要快得多.

通常,应用程序有一些业务规则抽象层,其中完整性问题是在概念上定义的;如果是这样的话,大多数紧随其后的开发人员都会期望在那里进行验证。如果这是一个一次性的实用程序,或者你将永远是唯一的开发人员,那么它将工作。与读取索引字段相比,黑客可能不会购买任何显著的效率改进,而且它通常是处理错误捕获和移植的一个令人不快的地方——除了你之外,它不是一个错误。(有点像“这不是一个bug,它是一个特性…”)

通常,应用程序有一些业务规则抽象层,其中完整性问题在概念上是定义的;如果是这样的话,大多数紧随其后的开发人员都会期望在那里进行验证。如果这是一个一次性的实用程序,或者你将永远是唯一的开发人员,那么它将工作。与读取索引字段相比,黑客可能不会购买任何显著的效率改进,而且它通常是处理错误捕获和移植的一个令人不快的地方——除了你之外,它不是一个错误。(有点像“这不是一个bug,它是一个功能…”)

我只是想知道为什么写操作会失败-您能否提供更多关于您实际试图存储的内容的详细信息?我担心的是,所有试图检查唯一性约束的索引都可能导致锁定,从而使读取线程暂停。有些事情你可以侥幸逃脱,但是当它涉及到一个索引时,它可能是非常糟糕的。当然。我正在设计一个内容聚合器,它将从越来越多的数据源中提取数据。对于每个数据记录,我都会有一个URL和一个用户id。我不想在任何记录中有任何重复的URL和用户id实例,但我确实希望会有许多可能存在重复的实例。我的想法是让索引的自然功能为我完成过滤工作。但我似乎需要找到另一种方法,如果它会锁定表以供读取(这也很重要),我只是想知道为什么写入会失败-您能否提供有关您实际尝试存储的内容的更多详细信息?我担心的是,所有试图检查唯一性约束的索引都可能导致锁定,从而使读取线程暂停。有些事情你可以侥幸逃脱,但是当它涉及到一个索引时,它可能是非常糟糕的。当然。我正在设计一个内容聚合器,它将从越来越多的数据源中提取数据。对于每个数据记录,我都会有一个URL和一个用户id。我不想在任何记录中有任何重复的URL和用户id实例,但我确实希望会有许多可能存在重复的实例。我的想法是让索引的自然功能为我完成过滤工作。但我似乎需要找到另一种方法,如果它会锁定表以进行读取(这一点也很重要),那么索引上的读取是否会导致锁升级,从而使任何计划的读卡器等待,直到索引不可用。。我想“脏”是最好的词。InnoDB存储和锁定文档似乎表明未使用锁升级。索引上的读取是否会导致锁升级,使任何计划的读卡器等待,直到索引未使用。。我想“脏”是最好的词。InnoDB存储和锁定文档似乎表明没有使用锁升级。