DB推荐-Portable, Concurrent(多只读,一次写入)

DB recommendation - Portable, Concurrent (multiple read only, one write)

我正在寻找可用于处理服务中断的网站的便携式数据库解决方案。我需要每晚从 SQL 服务器检索用户列表,并将他们的详细信息更新到便携式数据库中。它大约有 250,000 名用户(并且还在增加),每个用户可能有 25 个必填字段。在这些字段中,我认为需要搜索的字段少于 5 个。剩下的只需要检索。

我们的想法是,在服务中断时,我们可以使用设计用于从便携式数据库而不是 SQL 服务器运行的网站。我们的长期目标是迁移到云端并以完全不同的方式处理事情,但就短期而言,这是我们的目标。

该网站将成为 .Net Core 网站 api,因此将由多个用户在多个线程中访问。该网站将只需要读取权限,不会更新这些详细信息。

为了使便携式数据库保持最新状态,我正在考虑让另一个应用程序每晚 运行 更新数据。我们的业务是 24 小时营业(尽管一夜之间比较安静),因此有可能在使用网站时使用此更新程序。虽然服务中断会假定 SQL 服务器已关闭,但情况可能并非如此。还有其他因素在起作用,可能会导致我们所说的中断。这将是唯一更新数据库的软件。

我试过使用 LiteDB,但我无法让它以符合我的并发要求的方式工作。它似乎确实完成了一些工作,并且很容易获得 运行ning。但是,由于网络的性质 api,我经常 运行 进入锁定的文件。我确实为此制定了解决方案,但随后更新程序无法访问数据库文件。

有没有人有任何建议可供我参考?

考虑到问题的描述(1 table,25 万行 - 我假设 - 相对较快的增长率)和要求,我认为关系数据库不是你要找的。

我认为 nosql 数据库,或者更具体地说,面向文档的数据库更适合满足您的要求。有很多选择:Mongo、Cassandra、CouchDB,...选择权在您手中。

我个人对 ElasticSearch (https://www.elastic.co/elasticsearch) 有一些经验,它很容易学习,是 portable(在 Linux、Windows、容器上运行等...),可扩展,而且速度很快。我的意思是,真的非常快,您可以在 10-20 毫秒内获得结果(有时甚至更少)。

NEST nuget 包作为高级客户端使用 ElasticSearch (https://www.elastic.co/guide/en/elasticsearch/client/net-api/7.x/nest-getting-started.html)