Remove ".json" suffix in the generated files.

paper
Philippe PITTOLI 2024-05-06 11:47:07 +02:00
parent 96f290eb40
commit f5c9d1a7f2
5 changed files with 34 additions and 44 deletions

View File

@ -132,24 +132,24 @@ After adding a few objects in the database, here the index in action on the file
$ tree storage/ $ tree storage/
storage storage
├── data ├── data
│   ├── 0000000000.json │   ├── 0000000000
│   ├── 0000000001.json │   ├── 0000000001
│   ├── 0000000002.json │   ├── 0000000002
│   ├── 0000000003.json │   ├── 0000000003
│   ├── 0000000004.json │   ├── 0000000004
│   └── 0000000005.json │   └── 0000000005
├── indices ├── indices
│   └── by_id │   └── by_id
│   ├── 6e109b82-25de-4250-9c67-e7e8415ad5a7.json -> ../../data/0000000003.json │   ├── 6e109b82-25de-4250-9c67-e7e8415ad5a7 -> ../../data/0000000003
│   ├── 2080131b-97d7-4300-afa9-55b93cdfd124.json -> ../../data/0000000000.json │   ├── 2080131b-97d7-4300-afa9-55b93cdfd124 -> ../../data/0000000000
│   ├── 2118bf1c-e413-4658-b8c1-a08925e20945.json -> ../../data/0000000005.json │   ├── 2118bf1c-e413-4658-b8c1-a08925e20945 -> ../../data/0000000005
│   ├── b53fab8e-f394-49ef-b939-8a670abe278b.json -> ../../data/0000000004.json │   ├── b53fab8e-f394-49ef-b939-8a670abe278b -> ../../data/0000000004
│   ├── 7e918680-6bc2-4f29-be7e-3d2e9c8e228c.json -> ../../data/0000000002.json │   ├── 7e918680-6bc2-4f29-be7e-3d2e9c8e228c -> ../../data/0000000002
│   └── 8b4e83e3-ef95-40dc-a6e5-e6e697ce6323.json -> ../../data/0000000001.json │   └── 8b4e83e3-ef95-40dc-a6e5-e6e697ce6323 -> ../../data/0000000001
``` ```
We have 5 objects in the DB, each of them has a unique ID attribute, each attribute is related to a single object. We have 5 objects in the DB, each of them has a unique ID attribute, each attribute is related to a single object.
Getting an object by its ID is as simple as `cat storage/indices/by_id/<id>.json`. Getting an object by its ID is as simple as `cat storage/indices/by_id/<id>`.
Now we want to sort cars based on their `color` attribute. Now we want to sort cars based on their `color` attribute.
@ -165,14 +165,14 @@ $ tree storage/
├── partitions ├── partitions
│   └── by_color │   └── by_color
│   ├── blue │   ├── blue
│   │   ├── 0000000000.json -> ../../../data/0000000000.json │   │   ├── 0000000000 -> ../../../data/0000000000
│   │   └── 0000000004.json -> ../../../data/0000000004.json │   │   └── 0000000004 -> ../../../data/0000000004
│   ├── red │   ├── red
│   │   ├── 0000000001.json -> ../../../data/0000000001.json │   │   ├── 0000000001 -> ../../../data/0000000001
│   │   ├── 0000000002.json -> ../../../data/0000000002.json │   │   ├── 0000000002 -> ../../../data/0000000002
│   │   └── 0000000003.json -> ../../../data/0000000003.json │   │   └── 0000000003 -> ../../../data/0000000003
│   └── violet │   └── violet
│   └── 0000000005.json -> ../../../data/0000000005.json │   └── 0000000005 -> ../../../data/0000000005
``` ```
Now the attribute corresponds to a directory (blue, red, violet, etc.) containing a symlink for each related object. Now the attribute corresponds to a directory (blue, red, violet, etc.) containing a symlink for each related object.
@ -190,12 +190,12 @@ $ tree storage/
└── tags └── tags
└── by_keyword └── by_keyword
├── elegant ├── elegant
│   ├── 0000000000.json -> ../../../data/0000000000.json │   ├── 0000000000 -> ../../../data/0000000000
│   └── 0000000003.json -> ../../../data/0000000003.json │   └── 0000000003 -> ../../../data/0000000003
├── impressive ├── impressive
│   ├── 0000000000.json -> ../../../data/0000000000.json │   ├── 0000000000 -> ../../../data/0000000000
│   ├── 0000000001.json -> ../../../data/0000000001.json │   ├── 0000000001 -> ../../../data/0000000001
│   └── 0000000003.json -> ../../../data/0000000003.json │   └── 0000000003 -> ../../../data/0000000003
... ...
``` ```
Tags are very similar to partitions and are used the exact same way for search, update and deletion. Tags are very similar to partitions and are used the exact same way for search, update and deletion.

View File

@ -200,7 +200,7 @@ abstract class DODB::Storage(V)
end end
private def file_path(key : Int32) private def file_path(key : Int32)
"#{data_path}/%010i.json" % key "#{data_path}/%010i" % key
end end
private def locks_directory : String private def locks_directory : String

View File

@ -1,5 +1,4 @@
require "file_utils" require "file_utils"
require "json"
require "./exceptions.cr" require "./exceptions.cr"
require "./indexer.cr" require "./indexer.cr"
@ -91,10 +90,7 @@ class DODB::Index(V) < DODB::Indexer(V)
raise MissingEntry.new(@name, index) unless ::File.exists? file_path raise MissingEntry.new(@name, index) unless ::File.exists? file_path
::File.readlink(file_path) ::File.readlink(file_path).sub(/^.*\//, "").to_i
.sub(/\.json$/, "")
.sub(/^.*\//, "")
.to_i
end end
def get_with_key(index : String) : Tuple(V, Int32) def get_with_key(index : String) : Tuple(V, Int32)
@ -138,11 +134,11 @@ class DODB::Index(V) < DODB::Indexer(V)
# FIXME: Now that its being used outside of this class, name it properly. # FIXME: Now that its being used outside of this class, name it properly.
def file_path_index(index_key : String) def file_path_index(index_key : String)
"#{indexing_directory}/#{index_key}.json" "#{indexing_directory}/#{index_key}"
end end
private def get_data_symlink_index(key : String) private def get_data_symlink_index(key : String)
"../../data/#{key}.json" "../../data/#{key}"
end end
end end

View File

@ -1,5 +1,4 @@
require "file_utils" require "file_utils"
require "json"
require "./indexer.cr" require "./indexer.cr"
@ -78,9 +77,7 @@ class DODB::Partition(V) < DODB::Indexer(V)
end end
private def get_key(path : String) : Int32 private def get_key(path : String) : Int32
path.sub(/\.json$/, "") path.sub(/^.*\//, "").to_i
.sub(/^.*\//, "")
.to_i
end end
private def indexing_directory(partition) private def indexing_directory(partition)
@ -88,11 +85,11 @@ class DODB::Partition(V) < DODB::Indexer(V)
end end
private def get_partition_symlink(partition : String, key : String) private def get_partition_symlink(partition : String, key : String)
"#{indexing_directory partition}/#{key}.json" "#{indexing_directory partition}/#{key}"
end end
private def get_data_symlink(key : String) private def get_data_symlink(key : String)
"../../../data/#{key}.json" "../../../data/#{key}"
end end
end end

View File

@ -1,5 +1,4 @@
require "file_utils" require "file_utils"
require "json"
class DODB::Tags(V) < DODB::Indexer(V) class DODB::Tags(V) < DODB::Indexer(V)
property name : String property name : String
@ -89,9 +88,7 @@ class DODB::Tags(V) < DODB::Indexer(V)
end end
private def get_key(path : String) : Int32 private def get_key(path : String) : Int32
path.sub(/\.json$/, "") path.sub(/^.*\//, "").to_i
.sub(/^.*\//, "")
.to_i
end end
def indexing_directory : String def indexing_directory : String
@ -103,10 +100,10 @@ class DODB::Tags(V) < DODB::Indexer(V)
end end
private def get_tagged_entry_path(tag : String, key : String) private def get_tagged_entry_path(tag : String, key : String)
"#{indexing_directory}/#{tag}/#{key}.json" "#{indexing_directory}/#{tag}/#{key}"
end end
private def get_data_symlink(key : String) private def get_data_symlink(key : String)
"../../../data/#{key}.json" "../../../data/#{key}"
end end
end end