Skip to content

Instantly share code, notes, and snippets.

@lusis
Created November 26, 2010 06:09
Show Gist options
  • Save lusis/716336 to your computer and use it in GitHub Desktop.
Save lusis/716336 to your computer and use it in GitHub Desktop.
Testing lookup in JSON of array vs. hash
begin
require 'json'
rescue LoadError
require 'rubygems'
require 'json'
end
require 'benchmark'
puts "Testing without cleanup"
Benchmark.bm do |b|
b.report("{}.has_key? 3") do
data = JSON.load(File.open("type2.json", "r"))
# Lookup disks by name in hash
data['hardware']['disk'].has_key?('sda1')
data['hardware']['disk'].has_key?('sda2')
data['hardware']['disk'].has_key?('sda3')
end
b.report("[].find 3") do
data = JSON.load(File.open("type1.json", "r"))
# Lookup disks by name in array
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda1'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda2'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda3'}
end
b.report("{}.has_key? 10") do
data = JSON.load(File.open("type4.json", "r"))
# Lookup disks by name in hash
data['hardware']['disk'].has_key?('sda1')
data['hardware']['disk'].has_key?('sda2')
data['hardware']['disk'].has_key?('sda3')
data['hardware']['disk'].has_key?('sda4')
data['hardware']['disk'].has_key?('sda5')
data['hardware']['disk'].has_key?('sda6')
data['hardware']['disk'].has_key?('sda7')
data['hardware']['disk'].has_key?('sda8')
data['hardware']['disk'].has_key?('sda9')
data['hardware']['disk'].has_key?('sda10')
end
b.report("[].find 10") do
data = JSON.load(File.open("type3.json", "r"))
# Lookup disks by name in array
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda1'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda2'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda3'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda4'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda5'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda6'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda7'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda8'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda9'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda10'}
end
end
puts "Testing with cleanup"
GC.start
Benchmark.bm do |b|
b.report("{}has_key? 3") do
data = JSON.load(File.open("type2.json", "r"))
# Lookup disks by name in hash
data['hardware']['disk'].has_key?('sda1')
data['hardware']['disk'].has_key?('sda2')
data['hardware']['disk'].has_key?('sda3')
end
b.report("[].find 3") do
data = JSON.load(File.open("type1.json", "r"))
# Lookup disks by name in array
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda1'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda2'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda3'}
end
b.report("{}.has_key? 10") do
data = JSON.load(File.open("type4.json", "r"))
# Lookup disks by name in hash
data['hardware']['disk'].has_key?('sda1')
data['hardware']['disk'].has_key?('sda2')
data['hardware']['disk'].has_key?('sda3')
data['hardware']['disk'].has_key?('sda4')
data['hardware']['disk'].has_key?('sda5')
data['hardware']['disk'].has_key?('sda6')
data['hardware']['disk'].has_key?('sda7')
data['hardware']['disk'].has_key?('sda8')
data['hardware']['disk'].has_key?('sda9')
data['hardware']['disk'].has_key?('sda10')
end
b.report("[].find 10") do
data = JSON.load(File.open("type3.json", "r"))
# Lookup disks by name in array
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda1'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda2'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda3'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda4'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda5'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda6'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda7'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda8'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda9'}
data['hardware']['disk']['devices'].find {|d| d['name'] == 'sda10'}
end
end
{
"id": "0123456789abcdef",
"name": "myname",
"provider": "puppet",
"role": "some_identifier_from_cm_system_can_be_nil?",
"timestamp": 1290616560,
"provisioned": "true",
"os": {
"name": "linux",
"version": "2.6.35-22-generic",
"vendor": "ubuntu",
"vendor_version": "10.10"
},
"hardware": {
"type": "virtual",
"provider": "vmware",
"arch": "x86_64",
"ram": 8192,
"swap": 768,
"cpu": {
"count": 4,
"cores": 2,
"speed": "2.4",
"vendor": "Intel",
"vendor_model": "T770",
"vendor_description": "Intel(R) Core(TM) i5"
},
"disk": {
"devices": [
{
"name": "sda1",
"size": 500
},
{
"name": "sda2",
"size": 500
},
{
"name": "sda3",
"size": 500
},
{
"name": "sda4",
"size": 500
}
]
},
"network":{
"devices": [
{
"name": "eth0",
"address": "192.168.1.1/24",
"hwaddress": "01:01:01:01:01:01",
"speed": 1000,
"mtu": 9000,
"alt_addresses": ["192.168.1.2", "192.168.1.3", "192.168.1.4"],
"gateway": "192.168.1.254"
},
{
"name": "eth1",
"address": "10.0.0.1/8",
"hwaddress": "01:01:01:01:01:02",
"speed": 1000,
"mtu": 9000,
"alt_addresses": null,
"gateway": "10.0.0.254"
}
]
}
}
}
{
"id": "0123456789abcdef",
"name": "myname",
"provider": "puppet",
"role": "some_identifier_from_cm_system_can_be_nil?",
"timestamp": 1290616560,
"provisioned": "true",
"os": {
"name": "linux",
"version": "2.6.35-22-generic",
"vendor": "ubuntu",
"vendor_version": "10.10"
},
"hardware": {
"type": "virtual",
"provider": "vmware",
"arch": "x86_64",
"ram": 8192,
"swap": 768,
"cpu": {
"count": 4,
"cores": 2,
"speed": "2.4",
"vendor": "Intel",
"vendor_model": "T770",
"vendor_description": "Intel(R) Core(TM) i5"
},
"disk": {
"sda1": {
"size": 500
},
"sda2": {
"size": 500
},
"sda3": {
"size": 500
},
"sda4": {
"size": 500
}
},
"network":{
"devices": [
{
"name": "eth0",
"address": "192.168.1.1/24",
"hwaddress": "01:01:01:01:01:01",
"speed": 1000,
"mtu": 9000,
"alt_addresses": ["192.168.1.2", "192.168.1.3", "192.168.1.4"],
"gateway": "192.168.1.254"
},
{
"name": "eth1",
"address": "10.0.0.1/8",
"hwaddress": "01:01:01:01:01:02",
"speed": 1000,
"mtu": 9000,
"alt_addresses": null,
"gateway": "10.0.0.254"
}
]
}
}
}
{
"id": "0123456789abcdef",
"name": "myname",
"provider": "puppet",
"role": "some_identifier_from_cm_system_can_be_nil?",
"timestamp": 1290616560,
"provisioned": "true",
"os": {
"name": "linux",
"version": "2.6.35-22-generic",
"vendor": "ubuntu",
"vendor_version": "10.10"
},
"hardware": {
"type": "virtual",
"provider": "vmware",
"arch": "x86_64",
"ram": 8192,
"swap": 768,
"cpu": {
"count": 4,
"cores": 2,
"speed": "2.4",
"vendor": "Intel",
"vendor_model": "T770",
"vendor_description": "Intel(R) Core(TM) i5"
},
"disk": {
"devices": [
{
"name": "sda1",
"size": 500
},
{
"name": "sda2",
"size": 500
},
{
"name": "sda3",
"size": 500
},
{
"name": "sda4",
"size": 500
},
{
"name": "sda5",
"size": 500
},
{
"name": "sda6",
"size": 500
},
{
"name": "sda7",
"size": 500
},
{
"name": "sda8",
"size": 500
},
{
"name": "sda9",
"size": 500
},
{
"name": "sda10",
"size": 500
}
]
},
"network":{
"devices": [
{
"name": "eth0",
"address": "192.168.1.1/24",
"hwaddress": "01:01:01:01:01:01",
"speed": 1000,
"mtu": 9000,
"alt_addresses": ["192.168.1.2", "192.168.1.3", "192.168.1.4"],
"gateway": "192.168.1.254"
},
{
"name": "eth1",
"address": "10.0.0.1/8",
"hwaddress": "01:01:01:01:01:02",
"speed": 1000,
"mtu": 9000,
"alt_addresses": null,
"gateway": "10.0.0.254"
}
]
}
}
}
{
"id": "0123456789abcdef",
"name": "myname",
"provider": "puppet",
"role": "some_identifier_from_cm_system_can_be_nil?",
"timestamp": 1290616560,
"provisioned": "true",
"os": {
"name": "linux",
"version": "2.6.35-22-generic",
"vendor": "ubuntu",
"vendor_version": "10.10"
},
"hardware": {
"type": "virtual",
"provider": "vmware",
"arch": "x86_64",
"ram": 8192,
"swap": 768,
"cpu": {
"count": 4,
"cores": 2,
"speed": "2.4",
"vendor": "Intel",
"vendor_model": "T770",
"vendor_description": "Intel(R) Core(TM) i5"
},
"disk": {
"sda1": {
"size": 500
},
"sda2": {
"size": 500
},
"sda3": {
"size": 500
},
"sda4": {
"size": 500
},
"sda5": {
"size": 500
},
"sda6": {
"size": 500
},
"sda7": {
"size": 500
},
"sda8": {
"size": 500
},
"sda9": {
"size": 500
},
"sda10": {
"size": 500
}
},
"network":{
"devices": [
{
"name": "eth0",
"address": "192.168.1.1/24",
"hwaddress": "01:01:01:01:01:01",
"speed": 1000,
"mtu": 9000,
"alt_addresses": ["192.168.1.2", "192.168.1.3", "192.168.1.4"],
"gateway": "192.168.1.254"
},
{
"name": "eth1",
"address": "10.0.0.1/8",
"hwaddress": "01:01:01:01:01:02",
"speed": 1000,
"mtu": 9000,
"alt_addresses": null,
"gateway": "10.0.0.254"
}
]
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment