FileStream、嵌入式 SQL 和 NoSQl 之间的基准(读取性能)测试使用啥?
Posted
技术标签:
【中文标题】FileStream、嵌入式 SQL 和 NoSQl 之间的基准(读取性能)测试使用啥?【英文标题】:What to use for a benchmark (read performance) test between FileStream, Embedded SQL, and NoSQl?FileStream、嵌入式 SQL 和 NoSQl 之间的基准(读取性能)测试使用什么? 【发布时间】:2011-02-25 16:53:13 【问题描述】:我正在尝试编写一个搜索键值类型结构的小程序。我的搜索是找到搜索键值的最快方法。
我更喜欢在这个程序中使用 C#,除非另一种语言能给我带来显着的优势。我提出的另一个限制是一切都必须在同一台计算机上。我不想使用 Oracle 或 SQL Server 数据库,因为我相信其他选项会让我更快。数据主要是读取,很少写入。每当数据发生更改或更新时,都会创建一个新集合,如果写入数据需要时间,也可以。
假设: 数据按数字顺序排序。 结构就这么简单:
Char3 文件:(此文件将只存储 3 个字符键) 键|值 100|2,5,6,7:9:3,4,5:3,4,5:2,5,6,7 999|2,5,6,7:9:3,4:3:2,5
Char5 文件:(此文件将只存储 5 个字符键) 键|值 A1000|2,5,6,7:9:3,4,5:3,4,5:2,5,6,7
Char3 和 Char5 遵循相同的存储结构,但具有不同类型的键。然而,密钥在给定文件中的长度相同
我有多个这样的文件,每个文件都遵循相同的结构。唯一的变化是每个文件中的密钥长度。
任务给定了一组 1-200(可变长度)的键,找到每个键相关的所有数据。
我从数据库生成这些数据,因此可以创建任何格式的数据。
对于 FileStream 测试,我将为给定文件填充每一行,然后使用 FileStream.Seek 根据填充快速跳转到给定位置。
我想做的是找出这些方法中哪一个最快?
-
FileStream - 我最终还将查看内存映射文件。 (对其他选项开放)
嵌入式 SQL - SQLite(对其他选项开放)
NoSql - ?? (寻找建议)
我的问题是我应该在每个类别中使用什么来进行适当的比较。例如,如果我使用的是 FileStream 而不是 FileStream.Seek,那么这将不是一个适当的比较。
我最终还希望尽可能多地并行运行搜索。我的主要要求是搜索性能。
任何想法或建议都会很棒。
谢谢,
更新:我将在处理它们时列出选项详细信息和结果 在包含 10K 行、2.28 MB 的文件中查找 5000 个随机条目(按行号或其他类似特征)。
-
FileStream options - 最佳时间:00:00:00.0398530 毫秒
【问题讨论】:
根据问题的标题和正文,不太清楚您是在寻找最快的解决方案本身还是确定最快解决方案的基准。 我想自己做基准测试,除非我能找到这样的比较。我试图通过基准测试来实现的是找出最好(最快)的解决方案。 【参考方案1】:您最好选择Berkeley DB,通过C# API(使用键值对存储)。 Berkeley DB 是一个库,因此它链接到您的应用程序。无需安装单独的服务器,也无需客户端/服务器开销。 Berkeley DB 非常快速、可扩展且可靠,旨在完全按照您在此处描述的方式进行操作。
免责声明:我是 Berkeley DB 的产品经理,所以我有点偏见。但是当我说这正是 Berkeley DB 设计的场景时,我是认真的。
【讨论】:
谢谢。我一定会尝试与 Berkley DB 合作,看看我会得到什么类型的结果。【参考方案2】:据我了解,您的数据已经在数据库中,已编入索引并可供搜索。您要做的是从数据库中提取它并实现您的自定义搜索方案,您可以在其中手动操作文件中的字节偏移等。恕我直言,这种方法肯定会失败。
众所周知,出于个人信念而不使用数据库并不是性能调整的最佳方法。 :-)
【讨论】:
这一部分是信念,一部分是经验。我或多或少在寻找一个独立的解决方案,因此试图从等式中删除一个数据库。以上是关于FileStream、嵌入式 SQL 和 NoSQl 之间的基准(读取性能)测试使用啥?的主要内容,如果未能解决你的问题,请参考以下文章