文本存储文件在 NodeJS 中同时更新并导致数据完整性违规是否可能?
Is it a possible scenario that a text storage file gets updated simultaneously in NodeJS and causing data integrity violation?
我正在练习 NodeJS 并开发一个小型应用程序,该应用程序具有将 json 对象存储到文本文件的端点,并且还能够在文件中搜索对象。我为此目的使用了一个文件,我知道出于许多考虑我应该使用多个文件,但让我们考虑一下只有一个存储文本文件的情况。
据我了解,(不是 100% 确定)NodeJS 是单线程的,并且两个同时的 API 调用不可能同时更新文件,因为它们的每个进程将在一个单独的线程中。
那么我的理解对吗?或者有可能文件同时更新会导致数据完整性违规?如果是,如何处理?有没有办法在进程完成之前锁定文件?
Yes, it can happen。虽然 NodeJS 是 single-threaded,但 I/O 不是 。这是它的核心原则之一。
您可以在写信之前缓解此类问题 by locking files(link 只是如何做到这一点的一个示例)。
另一种方法是 use SQLite。没有设置或管理数据库服务器(例如 MySQL)。整个数据库包含在一个文件中,但它处理诸如在多次写入时锁定、写入时崩溃等问题。
"Think of SQLite not as a replacement for Oracle [a database server] but as a replacement for fopen() [working with plain files]"
我正在练习 NodeJS 并开发一个小型应用程序,该应用程序具有将 json 对象存储到文本文件的端点,并且还能够在文件中搜索对象。我为此目的使用了一个文件,我知道出于许多考虑我应该使用多个文件,但让我们考虑一下只有一个存储文本文件的情况。
据我了解,(不是 100% 确定)NodeJS 是单线程的,并且两个同时的 API 调用不可能同时更新文件,因为它们的每个进程将在一个单独的线程中。
那么我的理解对吗?或者有可能文件同时更新会导致数据完整性违规?如果是,如何处理?有没有办法在进程完成之前锁定文件?
Yes, it can happen。虽然 NodeJS 是 single-threaded,但 I/O 不是 。这是它的核心原则之一。
您可以在写信之前缓解此类问题 by locking files(link 只是如何做到这一点的一个示例)。
另一种方法是 use SQLite。没有设置或管理数据库服务器(例如 MySQL)。整个数据库包含在一个文件中,但它处理诸如在多次写入时锁定、写入时崩溃等问题。
"Think of SQLite not as a replacement for Oracle [a database server] but as a replacement for fopen() [working with plain files]"