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/
|
$ 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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 it’s being used outside of this class, name it properly.
|
# FIXME: Now that it’s 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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue