2015-02-17 13 views
2

Я ищу несколько советов, так как в настоящее время я рисую пробел в названии для абстракции коллекции. Это может быть вопрос, не относящийся к теме, поэтому приносите извинения, если это будет рассмотрено.Как называть коллекцию карт ключей/значений B + Tree, которая также выступает в качестве контейнера для других коллекций

Я работаю над библиотекой, которая предоставляет хранилище B + Tree, и поддерживает несколько видов интерфейсов коллекции над этим деревом B +, такие как карты ключей/значений и отсортированные наборы.

Особый вид коллекции - это тот, который явно поддерживает вложенные дочерние коллекции в дополнение к регулярному хранению ключа/ценности карты. Это обеспечивает средства для поддержки пространства имен/табличного пространства/ключевого пространства.

Мое текущее рабочее название для этой коллекции абстракции - «MultiMap». Но это не кажется правильным и не соответствует действительности, например. мультиплеер STL. Но до сих пор я не мог придумать ничего лучшего.

Любые предложения для лучшего имени будут оценены.

Как дополнительная информация, обратитесь к определению интерфейса я рассматриваю в настоящее время ниже:

/** Represents a map that can be the container for nested collections. 
* This allows having arbitrarily deep nesting for collections to support 
* organization into (hierarchies of) separate name, key or table spaces. 
* So instead of for example having a map that contains variable length 
* keys such as "users/1", "users/2", etc. a nested collection "users" 
* could be created that has fixed size integer keys (1, 2, ...). Note 
* that storage for collections can be expensive. If not stored as a 
* small embedded collection with only a few items, it will take up at 
* least one physical storage page. Like in a regular map, all keys must 
* be unique and items are stored in sorted key order. */ 
class IMultiMapCursor : public virtual IMapCursor { 
public: 
    /** Positions the cursor at the first nested child collection, if any */ 
    virtual bool SeekFirstNestedCollection() = 0; 

    /** Moves the cursor to the next nested child collection, if any */ 
    virtual bool SeekNextNestedCollection() = 0; 

    /** Opens or creates a key/value map with the given @map_id under the 
    * map for this cursor, and returns a cursor to the nested map. */ 
    virtual IMapCursor* OpenNestedMap(
     const Slice& map_id, 
     const MapOptions& map_options = MapOptions::kOpenExisting) = 0; 

    /** Opens or creates a key/value map with the given @path_to_map, 
    * relative to the map for this cursor, and returns a cursor to the 
    * nested map. */ 
    virtual IMapCursor* OpenNestedMap(
     const CollectionPath& path_to_map, 
     const MapOptions& map_options = MapOptions::kOpenExisting) = 0; 

    /** Opens or creates a key/value multi-map with the given @map_id under 
    * the map for this cursor, and returns a cursor to the nested map. */ 
    virtual IMultiMapCursor* OpenNestedMultiMap(
     const Slice& map_id, 
     const MapOptions& map_options = MapOptions::kOpenExisting) = 0; 

    /** Opens or creates a key/value multi-map with the given @path_to_map, 
    * relative to the map for this cursor, and returns a cursor to the 
    * nested map. */ 
    virtual IMultiMapCursor* OpenNestedMultiMap(
     const CollectionPath& path_to_map, 
     const MapOptions& map_options = MapOptions::kOpenExisting) = 0; 

    /** Opens or creates a sorted set with the given @set_id under the map 
    * for this cursor, and returns a cursor to the nested set. */ 
    virtual ISortedSetCursor* OpenNestedSortedSet(
     const Slice& set_id, 
     const SetOptions& set_options = SetOptions::kOpenExisting) = 0; 

    /** Opens or creates a sorted set with the given @path_to_set, 
    * relative to the map for this cursor, and returns a cursor to the 
    * nested set. */ 
    virtual ISortedSetCursor* OpenNestedSortedSet(
     const CollectionPath& path_to_set, 
     const SetOptions& set_options = SetOptions::kOpenExisting) = 0; 

    /** Opens or creates a non-sorted set with the given @set_id under the 
    * map for this cursor, and returns a cursor to the nested set. */ 
    virtual ISetCursor* OpenNestedSet(
     const Slice& set_id, 
     const SetOptions& set_options = SetOptions::kOpenExisting) = 0; 

    /** Opens or creates a non-sorted set with the given @path_to_set, relative to the 
    * map for this cursor, and returns a cursor to the nested set. */ 
    virtual ISetCursor* OpenNestedSet(
     const CollectionPath& path_to_set, 
     const SetOptions& set_options = SetOptions::kOpenExisting) = 0; 

    /** Opens or creates a list with the given @list_id under this map, and 
    * returns a cursor to the nested list. */ 
    virtual IListCursor* OpenNestedList(
     const Slice& list_id, 
     const ListOptions& list_options = ListOptions::kOpenExisting) = 0; 

    /** Opens or creates a list with the given @path_to_list under this map, 
    * and returns a cursor to the nested list. */ 
    virtual IListCursor* OpenNestedList(
     const CollectionPath& path_to_list, 
     const ListOptions& list_options = ListOptions::kOpenExisting) = 0; 

    /** Renames the existing collection with id @current_id to @new_id. 
    * Requires (a) @new_id to be available. (b) the collection not to 
    * have an open cursor. */ 
    virtual bool RenameNestedChildCollection(const Slice& current_id, const Slice& new_id) = 0; 
}; 
+0

CollectionMap? GenericMap? AnyMap? CollectionOrKeyValueMap? –

ответ

4

Исходя из формулировки вашего вопроса, как об очевидном NestedMap?

Другой, который приходит на ум, это HyperMap. Согласно определению hyper означает не более; выше; превышения; чрезмерно; выше нормального, все из которых могут быть использованы для описания того факта, что карта хранит больше, чем просто нормальная пара ключей/значений.

+0

Спасибо за ваши предложения Rado.Похоже, что это не очень популярный вопрос, учитывая низкие взгляды, первый единственный ответ и мой недавно полученный значок «Tumbleweed»), несмотря на скромную награду за поощрение. Я считал «NestedMap», но это слово подразумевает, что карта вложена (т. Е. Сам ребенок), где он является родителем, в который вложены дочерние коллекции. – Alex

1

Основываясь на вложенности пространств, эта коллекция позволяет, как насчет HierarchicalMap, HierarchyMap или HierMap?

+0

Мне нравится это имя, однако без поддержки intellisense я подозреваю довольно много типизирующих проб для разработчиков неродного английского, так как «иерархия» - это не так просто слово. – Alex

0

Поскольку он отображает ключи/значения в дереве: KeyTree/MapTree, CollectionTree или со значениями можно считать дискретным: DiscreteTree/DiscreteStructureTree

будет обновляться с более мысли.

1

Как насчет TreeMap? Отображаемое значение может быть одноузловым деревом (листом), представляющим пару ключ/значение или дерево с одним узлом для чего-либо еще. Каждое значение идеально удовлетворяет определению Tree, позволяя согласованному присвоению имен, при условии, что эти структуры фактически являются деревьями (т. Е. Нет межсоединений с братьями и сестрами). Обратите внимание, что даже ключ без значения будет действительным деревом.

+0

Я согласен, что это похоже на логическое имя, так как базовая реализация решает эту проблему для некоторых из этих интерфейсов коллекции, хотя и с оптимизированными макетами узлов (например, листовой узел для отсортированного набора не нуждается в хранилище для значений). Однако другие типы коллекций, не структурированные как деревья (не отсортированные списки и наборы), также могут храниться как дети в этой «мультимаме». – Alex

+0

Ну, несортированные списки и наборы в n-арном дереве _are_ дети, не так ли? Возьмите корень и добавьте все элементы списка/set как прямые листья. Частью самой природы B + Trees является тот факт, что он позволяет эффективно отслеживать порядок, делая его вполне подходящим для списков и наборов. В конце концов, дерево B + также является деревом. Я понимаю, однако, что люди, использующие ваш класс, могут не находить интуитивно понятным, что вы можете хранить списки в чем-то, содержащем слово Tree. – Jan

+0

А теперь я вижу описание вашего интерфейса. Итак, вот где ваша проблема живет в иерархии абстракции. Я, наверное, пропустил точку ;-) – Jan

0

Это SuperMap!

Поскольку это карта, которая может отображать другие Карты/коллекции, некоторые имена, которые приходят на ум, - это CollectionMap, BucketMap, может быть, даже BucketTree в зависимости от вашей реализации.

0

FlexMap как ваша коллекция абстракции обладает гибкостью.

Или AlexMap или ALXmap, как вы это придумали.