gpt4 book ai didi

c - 实现高性能分布式文件系统/数据库

转载 作者:IT王子 更新时间:2023-10-29 01:24:38 27 4
gpt4 key购买 nike

我需要在 Linux 的分布式系统中实现尽可能快的存储键/值对的方法。数据库的记录很小,平均256字节。

我正在考虑使用 open()、write() 和 read() 系统调用,并在文件中的某个偏移处直接写入键值对。我可以省略 fdatasync() 系统调用,因为我将使用带电池的 SSD 磁盘,所以如果系统意外关闭,我不必担心 ACID 合规性。Linux 已经提供了磁盘缓存实现,因此在已经加载到内存中的扇区上不会发生读/写。这(我认为)将是最快的数据存储方式,比任何其他具有缓存能力的数据库引擎(例如 GT.M 或 Intersystem 的 Globals)快得多。

但是数据没有被复制,为了实现复制,我可以使用 NFS 挂载另一台 Linux 服务器的文件系统并将数据复制到那里,例如,如果我有 2 台数据服务器(1 台本地服务器和 1 台远程服务器),我会发出 2 个 open()、2 个 write() 和 2 个 close() 调用。如果远程服务器上的事务失败,我会将其标记为“不同步”,并在远程服务器恢复时再次复制好文件。

您如何看待这种方法?会很快吗?我可以通过 UDP 使用 NFS,这样我就可以避免 TCP 堆栈开销。

到目前为止的优势列表如下:

  • 重用 Linux 磁盘缓存
  • 几行代码
  • 高性能

我将在 C 中对此进行编码。为了在文件中定位记录,我将在内存中保留一个带有指向物理位置的指针的 btree。

最佳答案

我想到了一些建议。

  • 是否需要为每笔交易打开()/写入()/关闭()? open() 的系统调用开销可能特别重要

  • 您可以使用 mmap() 而不是显式 write() 吗?

  • 如果您为每个事务执行 2 次 write() 调用(1 次本地,1 次 NFS),似乎任何类型的网络问题(延迟、丢包等)都有可能影响您的如果您正在等待 NFS write() 调用成功,则应用程序会突然停止。如果您不等待,例如通过从单独的线程执行 NFS 写入,您的复杂性将迅速增加(我认为“几行代码”不会保持正确。)

一般来说,我建议您在选择重新发明这个特定的轮子之前真正向自己证明可用的工具不能满足您的性能要求。

关于c - 实现高性能分布式文件系统/数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8807954/

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