Remove ".json" suffix in the generated files.
parent
96f290eb40
commit
f5c9d1a7f2
48
README.md
48
README.md
|
@ -132,24 +132,24 @@ After adding a few objects in the database, here the index in action on the file
|
|||
$ tree storage/
|
||||
storage
|
||||
├── data
|
||||
│ ├── 0000000000.json
|
||||
│ ├── 0000000001.json
|
||||
│ ├── 0000000002.json
|
||||
│ ├── 0000000003.json
|
||||
│ ├── 0000000004.json
|
||||
│ └── 0000000005.json
|
||||
│ ├── 0000000000
|
||||
│ ├── 0000000001
|
||||
│ ├── 0000000002
|
||||
│ ├── 0000000003
|
||||
│ ├── 0000000004
|
||||
│ └── 0000000005
|
||||
├── indices
|
||||
│ └── by_id
|
||||
│ ├── 6e109b82-25de-4250-9c67-e7e8415ad5a7.json -> ../../data/0000000003.json
|
||||
│ ├── 2080131b-97d7-4300-afa9-55b93cdfd124.json -> ../../data/0000000000.json
|
||||
│ ├── 2118bf1c-e413-4658-b8c1-a08925e20945.json -> ../../data/0000000005.json
|
||||
│ ├── b53fab8e-f394-49ef-b939-8a670abe278b.json -> ../../data/0000000004.json
|
||||
│ ├── 7e918680-6bc2-4f29-be7e-3d2e9c8e228c.json -> ../../data/0000000002.json
|
||||
│ └── 8b4e83e3-ef95-40dc-a6e5-e6e697ce6323.json -> ../../data/0000000001.json
|
||||
│ ├── 6e109b82-25de-4250-9c67-e7e8415ad5a7 -> ../../data/0000000003
|
||||
│ ├── 2080131b-97d7-4300-afa9-55b93cdfd124 -> ../../data/0000000000
|
||||
│ ├── 2118bf1c-e413-4658-b8c1-a08925e20945 -> ../../data/0000000005
|
||||
│ ├── b53fab8e-f394-49ef-b939-8a670abe278b -> ../../data/0000000004
|
||||
│ ├── 7e918680-6bc2-4f29-be7e-3d2e9c8e228c -> ../../data/0000000002
|
||||
│ └── 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.
|
||||
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.
|
||||
|
@ -165,14 +165,14 @@ $ tree storage/
|
|||
├── partitions
|
||||
│ └── by_color
|
||||
│ ├── blue
|
||||
│ │ ├── 0000000000.json -> ../../../data/0000000000.json
|
||||
│ │ └── 0000000004.json -> ../../../data/0000000004.json
|
||||
│ │ ├── 0000000000 -> ../../../data/0000000000
|
||||
│ │ └── 0000000004 -> ../../../data/0000000004
|
||||
│ ├── red
|
||||
│ │ ├── 0000000001.json -> ../../../data/0000000001.json
|
||||
│ │ ├── 0000000002.json -> ../../../data/0000000002.json
|
||||
│ │ └── 0000000003.json -> ../../../data/0000000003.json
|
||||
│ │ ├── 0000000001 -> ../../../data/0000000001
|
||||
│ │ ├── 0000000002 -> ../../../data/0000000002
|
||||
│ │ └── 0000000003 -> ../../../data/0000000003
|
||||
│ └── 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.
|
||||
|
@ -190,12 +190,12 @@ $ tree storage/
|
|||
└── tags
|
||||
└── by_keyword
|
||||
├── elegant
|
||||
│ ├── 0000000000.json -> ../../../data/0000000000.json
|
||||
│ └── 0000000003.json -> ../../../data/0000000003.json
|
||||
│ ├── 0000000000 -> ../../../data/0000000000
|
||||
│ └── 0000000003 -> ../../../data/0000000003
|
||||
├── impressive
|
||||
│ ├── 0000000000.json -> ../../../data/0000000000.json
|
||||
│ ├── 0000000001.json -> ../../../data/0000000001.json
|
||||
│ └── 0000000003.json -> ../../../data/0000000003.json
|
||||
│ ├── 0000000000 -> ../../../data/0000000000
|
||||
│ ├── 0000000001 -> ../../../data/0000000001
|
||||
│ └── 0000000003 -> ../../../data/0000000003
|
||||
...
|
||||
```
|
||||
Tags are very similar to partitions and are used the exact same way for search, update and deletion.
|
||||
|
|
|
@ -200,7 +200,7 @@ abstract class DODB::Storage(V)
|
|||
end
|
||||
|
||||
private def file_path(key : Int32)
|
||||
"#{data_path}/%010i.json" % key
|
||||
"#{data_path}/%010i" % key
|
||||
end
|
||||
|
||||
private def locks_directory : String
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
require "file_utils"
|
||||
require "json"
|
||||
|
||||
require "./exceptions.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
|
||||
|
||||
::File.readlink(file_path)
|
||||
.sub(/\.json$/, "")
|
||||
.sub(/^.*\//, "")
|
||||
.to_i
|
||||
::File.readlink(file_path).sub(/^.*\//, "").to_i
|
||||
end
|
||||
|
||||
def get_with_key(index : String) : Tuple(V, Int32)
|
||||
|
@ -138,11 +134,11 @@ class DODB::Index(V) < DODB::Indexer(V)
|
|||
|
||||
# FIXME: Now that it’s being used outside of this class, name it properly.
|
||||
def file_path_index(index_key : String)
|
||||
"#{indexing_directory}/#{index_key}.json"
|
||||
"#{indexing_directory}/#{index_key}"
|
||||
end
|
||||
|
||||
private def get_data_symlink_index(key : String)
|
||||
"../../data/#{key}.json"
|
||||
"../../data/#{key}"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
require "file_utils"
|
||||
require "json"
|
||||
|
||||
require "./indexer.cr"
|
||||
|
||||
|
@ -78,9 +77,7 @@ class DODB::Partition(V) < DODB::Indexer(V)
|
|||
end
|
||||
|
||||
private def get_key(path : String) : Int32
|
||||
path.sub(/\.json$/, "")
|
||||
.sub(/^.*\//, "")
|
||||
.to_i
|
||||
path.sub(/^.*\//, "").to_i
|
||||
end
|
||||
|
||||
private def indexing_directory(partition)
|
||||
|
@ -88,11 +85,11 @@ class DODB::Partition(V) < DODB::Indexer(V)
|
|||
end
|
||||
|
||||
private def get_partition_symlink(partition : String, key : String)
|
||||
"#{indexing_directory partition}/#{key}.json"
|
||||
"#{indexing_directory partition}/#{key}"
|
||||
end
|
||||
|
||||
private def get_data_symlink(key : String)
|
||||
"../../../data/#{key}.json"
|
||||
"../../../data/#{key}"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
require "file_utils"
|
||||
require "json"
|
||||
|
||||
class DODB::Tags(V) < DODB::Indexer(V)
|
||||
property name : String
|
||||
|
@ -89,9 +88,7 @@ class DODB::Tags(V) < DODB::Indexer(V)
|
|||
end
|
||||
|
||||
private def get_key(path : String) : Int32
|
||||
path.sub(/\.json$/, "")
|
||||
.sub(/^.*\//, "")
|
||||
.to_i
|
||||
path.sub(/^.*\//, "").to_i
|
||||
end
|
||||
|
||||
def indexing_directory : String
|
||||
|
@ -103,10 +100,10 @@ class DODB::Tags(V) < DODB::Indexer(V)
|
|||
end
|
||||
|
||||
private def get_tagged_entry_path(tag : String, key : String)
|
||||
"#{indexing_directory}/#{tag}/#{key}.json"
|
||||
"#{indexing_directory}/#{tag}/#{key}"
|
||||
end
|
||||
|
||||
private def get_data_symlink(key : String)
|
||||
"../../../data/#{key}.json"
|
||||
"../../../data/#{key}"
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue