Sqlite 与基于文件的数据存储?

2023-12-20

假设我有一个类似的课程,如下所示:

class User
  attr_accessor :name, :age
  def initialize(name, age)
    @name, @age = name, age
  end
end

现在,将用户保存为单个文件中 User 类的编组实例或者使用带有 ORM 的 Sqlite 数据库会更快吗?基于文件的数据存储有哪些缺点?


以下是在 SSD 上执行的基准测试结果。按照您的意愿解释它们。对于非常简单的查询和数据,将整个数据集编组并加载到内存中显得更快:

Rehearsal ---------------------------------------------------------------
Storing in DB                 0.080000   0.000000   0.080000 (  0.085909)
Marshalling to Disk           0.010000   0.000000   0.010000 (  0.004340)
Fetching marshal              0.000000   0.000000   0.000000 (  0.002288)
Fetching records from DB      5.530000   0.130000   5.660000 (  5.657053)
Fetching records from Array   0.350000   0.000000   0.350000 (  0.347798)
Find one record from DB       0.320000   0.020000   0.340000 (  0.336068)
Find one record from Array    0.260000   0.000000   0.260000 (  0.258766)
------------------------------------------------------ total: 6.700000sec

                                  user     system      total        real
Storing in DB                 0.080000   0.000000   0.080000 (  0.079717)
Marshalling to Disk           0.000000   0.000000   0.000000 (  0.002595)
Fetching marshal              0.000000   0.000000   0.000000 (  0.001466)
Fetching records from DB     10.830000   0.230000  11.060000 ( 11.041669)
Fetching records from Array   0.340000   0.000000   0.340000 (  0.335473)
Find one record from DB       0.320000   0.010000   0.330000 (  0.336917)
Find one record from Array    0.260000   0.000000   0.260000 (  0.255746)

这是基准:

require 'benchmark'
require 'sequel'
class User
  attr_reader :name, :age
  def initialize(name, age)
    @name, @age = name, age
  end
  def to_hash; {name:@name, age:@age}; end
end
db_array = 1000.times.map{ User.new "name#{rand 1000}", rand(1000) }
db_array << User.new( "unique", 42 )
DBFILE  = 'users.db'; MARSHAL = 'users.marshal'
File.delete(DBFILE) if File.exists?(DBFILE)
DB = Sequel.sqlite(DBFILE)
DB.create_table(:users){ column(:name,:string); column(:age,:int) }
db_users = DB[:users]
Benchmark.bmbm do |x|
  x.report('Storing in DB'){ db_users.multi_insert db_array.map(&:to_hash) }
  x.report('Marshalling to Disk'){ File.open(MARSHAL, 'w'){ |f| f << Marshal.dump(db_array) } }
  x.report('Fetching marshal'){ db_array = Marshal.load(File.open(MARSHAL,'r'){|f| f.read }) }
  query = db_users.select{ name > "name500" }
  x.report('Fetching records from DB'){ 1000.times{ query.all } }
  x.report('Fetching records from Array'){ 1000.times{ db_array.select{ |u| u.name > "name500" } } }
  x.report('Find one record from DB'){ 1000.times{ db_users[name:'unique'] } }
  x.report('Find one record from Array'){ 1000.times{ db_array.find{ |u| u.name == "unique" } } }
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sqlite 与基于文件的数据存储? 的相关文章

  • 如何在 rake 任务中强制使用 RAILS_ENV?

    我有这个小耙子任务 namespace db do namespace test do task reset do ENV RAILS ENV test Rake Task db drop invoke Rake Task db creat
  • 需要帮助获取嵌套的 ruby​​ 哈希层次结构

    我有哈希深层嵌套哈希 我希望每个键的层次结构 父到子 作为数组 例如 hash properties gt one gt extra headers gt type gt object type1 gt object2 entity gt
  • 在 Ruby/Sinatra 中解码 Facebook 的签名请求

    由于 Facebook 不赞成使用新的 FBML 我正在寻找一种新方法来创建 显示 选项卡 向粉丝显示一个版本 向非粉丝显示另一个版本的页面选项卡 Facebook 已将数据添加到signed request 中 当用户在应用程序中选择您的
  • 强制 DataMapper 断开与 postgresql 的连接

    我有一个测试 正在 postgresql 中创建和销毁多个数据库 为了能够删除数据库 我需要告诉 DataMapper 断开连接 我似乎找不到任何有关如何执行此操作的文档 DataMapper Adapters PostgresAdapte
  • ActiveRecord oracle_enhanced 适配器无法加载 ruby​​-oci8 库

    rails g scaffold失败 但 oci 脚本和 irb 数据查询有效 无法弄清楚出了什么问题 rails g scaffold table field1 integer field2 string invoke active re
  • 可以在哈希每个循环中访问索引吗?

    我可能遗漏了一些明显的东西 但是有没有办法访问哈希每个循环内迭代的索引 计数 hash three gt one four gt two one gt three hash each key value any way to know wh
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 从 ActiveRecord 获取表名

    I used ActiveRecord Base set table name在动态创建的 ActiveRecord 类上设置我的表名称 现在我需要知道稍后如何获得该值 api 文档没有提及如何执行此操作 另外 我无法从 ActiveRec
  • 使用 Ruby 获取 AWS 区域名称

    我正在为 AWS 开发 Rails 应用程序 并希望为区域名称创建下拉菜单 例如 us east 1 等 如果有人已经创建了 gem 来获取它们 我想使用它 有人知道这样的 gem 或有用的 API 吗 适用于 Ruby 的 AWS 开发工
  • 无需别名的 Ruby YAML 编写

    我正在从 ruby 将数据写入 yaml 文件 并且经常在该文件上添加别名 像 id001 somekey somevalue id001 就我而言 我使用 yaml 文件来aid可读性并将名称添加到文件中的值 因为现有数据只是 没有键的分
  • 由于符号链接错误,无法在 Mac OSX 10.8.1 中安装 ruby​​-1.9.2

    首先 我尝试了常见的rvm安装 rvm安装1 9 2 但是 显示了以下错误 The provided compiler usr bin gcc is LLVM based it is not yet fully supported by r
  • Capybara 的 has_selector 有哪些选项?

    我在 RSpec 中遇到此错误 有没有任何文档have selector解释了选项哈希中的每个键以及它到底有什么作用 invalid keys content should be one of text visible between co
  • 如何在 JS Rails 响应中包含 HTML?

    我有一个响应 HTML 和 JS AJAX 查询的 FooController app controllers foo controller rb class FooController lt ApplicationController l
  • Rails 3 - “无法解析 Yaml”

    我不知道我做错了什么 我尝试运行 rails c 但它只是给了我一个错误 10 分钟前它还在工作 C Ruby192 lib ruby 1 9 1 psych rb 148 in parse couldn t parse YAML at l
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • 回滚后是否应该删除迁移

    我对 ruby 和 Rails 相当陌生 刚刚开始了解迁移 我的问题是回滚后删除迁移的最佳实践或正确时间是什么 到目前为止 我读到的内容是回滚后是否删除迁移的观点问题 但是在团队中工作时删除迁移是否有任何重大影响 以及保留迁移文件相对于删除
  • 为什么||和 或 在 Rails 中的行为有所不同? [复制]

    这个问题在这里已经有答案了 可能的重复 i true 和 false 在 Ruby 中是真的吗 https stackoverflow com questions 2802494 i true and false in ruby is tr
  • Emacs、ruby:将 do 结束块转换为大括号,反之亦然

    我经常发现自己转换这样的代码 before do something end to before something 有没有办法在 emacs 中自动执行此任务 我使用 ruby mode 和 rinary 但它们在这里没有太大帮助 rub
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst

随机推荐

  • 为什么导航在版本 2.4.1 的导航抽屉活动模板中不起作用?

    使用Android Studio 2021 1 1 使用导航抽屉活动创建一个新项目 使用导航抽屉活动模板创建了一个默认的 Android 应用程序 在项目中添加了一个设置片段来测试action settings菜单和配置菜单项 被覆盖onO
  • Python“‘模块’对象不可调用”

    我正在尝试制作一个情节 from matplotlib import import sys from pylab import f figure figsize 7 7 但是当我尝试执行它时出现此错误 File mratio py line
  • 我可以在 git config 中设置推送选项(git push -o "...")吗?

    Git 2 10 引入了git推送选项 https git scm com docs git push git push o git push o my string 许多命令行选项都是可配置的 我想知道是否也可以这样做 我没能找到它git
  • 无法使用自定义 DelegateProxy 和协议接收事件

    我尝试将 DifficultyViewDelegate 的委托迁移到可观察的 这是我的 DifficultyViewDelegate objc protocol DifficultyViewDelegate class func level
  • MSK 不删除旧消息

    我有三个 MSK 集群 开发 非产品和产品 它们都具有以下集群配置 没有主题级别配置 auto create topics enable false default replication factor 3 min insync repli
  • d3.js 3D 数组插值

    代码在这里 http jsfiddle net S48QX http jsfiddle net S48QX 我想根据3D数据集绘制图像 例如 var data x 1 428 y 0 500 energy 0 458 x 1 428 y 1
  • 本地主机错误

    我在index php中有代码 在 head php 中
  • Mono 没有从我的 app.config 读取值?

    我有一个标准app config对于在项目 设置 选项卡中添加设置时由 Visual Studio 2010 创建的 NET 4 0 控制台应用程序 如 MSDN 上所述 应用程序设置 http msdn microsoft com en
  • 当 Openshift 说“驱逐”我的 pod 时,这是什么意思 - 为什么它一直这样做?

    我正在使用 OpenShift 3 StarterOpenShift 在线 http www openshift com运行一个小型网络项目 过去两个月一直运行良好 昨天突然停止运行 我发现部署只是陷入了 创建容器 当我尝试重建并重新启动项
  • 使 PowerShell 脚本在全局范围内运行 cmdlet

    我编写了以下 PowerShell 脚本 function Reload Module string moduleName module Get Module moduleName Remove Module moduleName Erro
  • 如何将鼠标光标从用户代码中移出?

    我的数据来自arduino 它从传感器获取数据 我想让用户程序处理数据 从 dev ttyUSB0 读取数据后 之后我需要使用程序的输出来控制鼠标光标 我真的很想避免此时编写内核驱动程序 推荐的方法是什么 在 Linux 环境中 也许是 X
  • 在 IE7 或 IE8 中查看打印 CSS

    我正在调试一个在打印时出现元素定位问题的网站 我有一个单独的 print css 文件 由具有 media print 属性的链接元素链接 此问题仅出现在IE7和IE8中 我正在寻找一种使用打印媒体类型查看页面的方法 但同时仍然可以使用 I
  • 将枚举与 Code First 和 Entity Framework 5 结合使用

    只是想确认一个印象 似乎 EF5 Code First 中的枚举仅在与使用它们作为属性类型的类在同一命名空间中声明时才受支持 谁能证实这一点吗 在网上找不到任何与此相关的内容 之前修复的相关错误 4 3 Beta 1 发行说明说 错误修复G
  • 将datagridView保存到sql数据库中

    第一次将数据网格保存到数据库 感谢您的帮助 我这样填充dataGrid private void FillGrid1 frmEditovat frm2 new frmEditovat this DataTable DT null DataR
  • 在DBeaver中查看主键

    DBeaver中有没有快速查看表主键的方法 就像例如在 Eclipse 数据源资源管理器中 其中主键行标有 PK 和特殊符号 对于给定的表 右键单击表名 在数据库导航器中 gt 选择查看图表 This will open a window
  • Excel VBA 尝试使用 For 循环将“MAX”公式写入具有不同范围的单元格

    我试图让 VBA 将公式写入不同的单元格 该公式将找到由某些变量决定的范围的最大值 我的变量I and J是 数字 整数 这是我的代码 Sub AddMAX Dim I As Integer Dim J As Integer Dim L A
  • Java:长格式的 util.Date 对象

    如何返回具有长值的 Date 对象 就像是 JsonProperty time public Date getTimeInLong Date date super getTime return date getTime I want thi
  • 运行 Apache 时,Django 打开 SQLite3 db 文件时出错

    我收到这个错误 操作错误 无法打开数据库文件 到目前为止我尝试过的事情是在 settings py 中设置 dev db 文件的绝对路径 我尝试将 www data 添加到我的管理组 并将项目文件夹的组设置为 admin 并将该组设置为 w
  • 将字符串列表从 Python 传递到 Rust

    我已经学习 Rust 大约两周了 今天 我进入了它的 FFI 我使用 Python 来玩 Rust 使用 ctypes 和 libc 我传递了整数 字符串 甚至学会了传递整数列表 感谢这个精彩的答案 https stackoverflow
  • Sqlite 与基于文件的数据存储?

    假设我有一个类似的课程 如下所示 class User attr accessor name age def initialize name age name age name age end end 现在 将用户保存为单个文件中 User