WO2013054588A1 - 情報処理装置、データストア操作方法、データ構築装置、データ構築方法、データ結合装置、データ結合方法およびプログラム - Google Patents

情報処理装置、データストア操作方法、データ構築装置、データ構築方法、データ結合装置、データ結合方法およびプログラム Download PDF

Info

Publication number
WO2013054588A1
WO2013054588A1 PCT/JP2012/070123 JP2012070123W WO2013054588A1 WO 2013054588 A1 WO2013054588 A1 WO 2013054588A1 JP 2012070123 W JP2012070123 W JP 2012070123W WO 2013054588 A1 WO2013054588 A1 WO 2013054588A1
Authority
WO
WIPO (PCT)
Prior art keywords
node
key
louds
data structure
tree
Prior art date
Application number
PCT/JP2012/070123
Other languages
English (en)
French (fr)
Inventor
小柳 光生
裕也 海野
吉田 一星
Original Assignee
インターナショナル・ビジネス・マシーンズ・コーポレーション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by インターナショナル・ビジネス・マシーンズ・コーポレーション filed Critical インターナショナル・ビジネス・マシーンズ・コーポレーション
Publication of WO2013054588A1 publication Critical patent/WO2013054588A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees

Definitions

  • the present invention relates to a data store, and more specifically, an information processing device that implements a data store that efficiently stores keys, a data store operation method, a data construction device that constructs a concise data structure of a tree structure, and a data construction method
  • the present invention relates to a data combining apparatus and data combining method for constructing a simple data structure in which a plurality of tree structures are combined, and a program thereof.
  • LOUDS Level Order Unary ⁇ Degree Sequence
  • Non-patent Document 1 LOUDS has a highly space-efficient data structure, and an operation for efficiently accessing each node in the tree structure has also been proposed (Non-Patent Document 2). For this reason, LOUDS is also preferably used in applications where data access frequency is relatively high.
  • a trie tree As a tree structure, a trie tree (TRIE) is known.
  • the read performance of the trie tree has a characteristic that it depends on the character string length of the key regardless of the number of data input to the trie tree. For this reason, the trie tree is suitably used in applications such as a dictionary that requires efficient storage of a large number of keys in a memory.
  • Various methods of mounting trie trees are known, but by implementing trie trees with LOUDS, the memory efficiency is 4 to 10 times that of double-array implementations. It is known that this can be done (Non-Patent Document 3).
  • a technique for searching for a key using a Bloom filter that uses a hash function is also known (Patent Document 1).
  • LOUDS is a data structure densely arranged in the memory space
  • a gap a node appears at a position where a new character string node is added. It is necessary to move an average half of the data to create 1 bit).
  • the present invention has been made in view of the above-described prior art, and the present invention is an information processing system that realizes a data store that stores keys with high space efficiency, can be built online, and has improved data operation performance.
  • An object of the present invention is to provide an apparatus, a data store operating method and a program for operating the data store.
  • Another object of the present invention is to provide a data construction apparatus and a data construction method for efficiently constructing a trivial data structure and filter of a trie tree, and to efficiently construct a simple data structure in which a plurality of trie trees are combined Data combining apparatus, data combining method, and program thereof.
  • the present invention provides an information processing apparatus having the following features in order to solve the above problems.
  • the information processing apparatus includes a key adding unit that receives an input key to be input and adds the input key to a buffer that configures a data store and maintains the key as a tree structure. Further, the information processing apparatus scans the nodes in the tree structure maintained by the buffer, constructs a concise data structure representing the tree structure, and approximates that a key exists in the concise data structure. The construction part which constructs the filter to give automatically is provided. Further, when performing a search in response to a query key query to the data store, the information processing apparatus further includes a query key in the concise data structure for the corresponding filter prior to searching the concise data structure. An inquiry unit is provided for confirming the existence.
  • the above configuration it is possible to realize a data store in which keys can be stored with high space efficiency and can be built online and data operation performance is improved.
  • the above filter allows you to know approximately whether the concise data structure contains keys, so you can efficiently query keys regardless of the number of concise data structures. It becomes possible to do.
  • FIG. 7 is a flowchart showing key addition processing for a key-value store, which is executed by the computer apparatus according to the present embodiment.
  • 7 is a flowchart showing key inquiry processing for a key-value store, which is executed by the computer apparatus according to the present embodiment.
  • 6 is a flowchart showing a main flow of a combination process in a key value store, which is executed by the computer apparatus according to the present embodiment.
  • FIG. 1 is a schematic hardware configuration diagram of a computer apparatus according to an embodiment.
  • FIG. 1 is a schematic hardware configuration diagram of a computer apparatus according to an embodiment.
  • FIG. 1 is a schematic hardware configuration diagram of a computer apparatus according to an embodiment.
  • a LOUDS Level Order Unary Degree Sequence
  • a trie tree and a Bloom filter are used as an information processing apparatus that implements a data store using a concise data structure expressing a tree structure and a filter.
  • a computer apparatus 100 that realizes the used key-value store will be described as an example.
  • the computer apparatus 100 constitutes a data construction apparatus for constructing a LOUDS and a Bloom filter and a data combination apparatus for constructing a combined LOUDS in which a plurality of trie trees are combined.
  • a technique for implementing a key-value store using a static data structure that is difficult to add such as LOUDS a technique called a facade can be preferably adopted.
  • a LOUDS is constructed each time a set of a predetermined number n (n is a natural number) of keys and values (hereinafter referred to as an input data set) is input, and a plurality of generated multiples are generated thereby.
  • n is a natural number
  • FIG. 1 is a diagram for explaining a method for implementing a key-value store using LOUDS by a facade.
  • a computer apparatus 500 shown in FIG. 1 includes a buffer trie tree 510 that receives an input data set to be input, and a plurality of lower-level LOUDSs 520-1 to 520-x.
  • the buffer trie tree 510 is a recordable buffer that accepts new addition of an input data set, and up to a certain number n of input data sets are additionally written.
  • the lower LOUDS 520 is constructed from the buffer trie tree 510. That is, approximately N / n lower LOUDSs 520-1 to 520-x are constructed with respect to the total input data N (N is a natural number) of the entire key value store.
  • N is a natural number
  • the read processing to the LOUDS itself may require nearly 10 times as long as the double array mounting. That is, in the mounting by LOUDS, the read performance may be reduced to n / (10N) as compared with the mounting by the double array. This means that, for example, even if the number of the lower LOUDS 520 is about 10, the performance can be reduced to about 1/100.
  • the combination processing has an advantage that the number of lower LOUDSs 520 is suppressed and the size of the trie tree is also compressed because overlapping prefixes are shared.
  • this embodiment realizes a key-value store that can perform data operations that do not substantially depend on the number of accesses to the lower LOUDS that increases with the total number N of input data or that is less affected by the increase in the number of accesses. For this reason, the actual data structure of the optimized key-value store, which will be described in detail later, is provided. The details of the key-value store realized by the present embodiment will be described below with reference to FIGS.
  • FIG. 2 is a functional block diagram of a computer device that realizes a key-value store according to the present embodiment.
  • the computer apparatus 100 shown in FIG. 2 includes buffer trie trees 122 and 124 and zero or one or more lower-level LOUDS 132-1 to 132-x as actual data structures constituting the key-value store 120. Furthermore, in the present embodiment, as the actual data structure, a plurality of Bloom filters 134-1 to 134-x are provided corresponding to the plurality of lower LOUDSs 132-1 to 132-x.
  • the buffer trie trees 122 and 124 are appendable buffers that maintain a trie tree in which data sets (key and value sets) are stored.
  • the buffer trie trees 122 and 124 are static trie trees in which LOUDS is difficult to be added, whereas they are configured as dynamically addable trie trees in which the tree structure is maintained by the link structure.
  • the buffer trie trees 122 and 124 are not particularly limited, but known methods such as a method of providing a character array for each node, a transition table (Transition Table), a triple array (Triple Array), a double array (Double Array), and the like. It can be implemented by this method.
  • the tree structure can include a Patricia tree.
  • the buffer trie tree 122 functions as an input buffer to which a predetermined number n of input data sets are added, and is hereinafter referred to as an input buffer trie tree 122.
  • the buffer trie tree 124 represents the buffer trie tree during the LOUDS construction process, which is set for LOUDS construction when the number of input data reaches a certain number n, for convenience. Hereinafter, it is referred to as a construction buffer trie tree 124.
  • the lower LOUDS 132 is a concise data structure that represents a trie tree in which n input data sets of the total number N of input data are stored.
  • the lower LOUDS 132 is constructed every time the number of data input to the input buffer trie tree 122 reaches a certain number n.
  • the Bloom filter 134 provided corresponding to each lower LOUDS 132 is a filter that approximates or probabilistically determines that a specific key exists in the corresponding lower LOUDS 132.
  • the Bloom filter 134 is constructed together with the lower LOUDS 132 during the LOUDS construction process that is called every time the number of data input to the input buffer trie tree 122 reaches a certain number n.
  • each hash function maps an input specific key to an array position in the bit array. If a specific key is input to k hash functions and any one of the bit groups corresponding to the obtained k hash values (array indexes) is “0”, the specific key is in the lower LOUDS 132. Indicates that it is not included. On the other hand, if all the bit groups corresponding to the obtained k array indexes are “1”, that is, if enabled, the specific key may be included in the lower LOUDS 132 (not included) In some cases).
  • the Bloom filter 134 has a so-called false positive (False Positive) and may cause a false detection, but does not have a false negative (False Negative).
  • the buffer trie trees 122 and 124, the lower LOUDS 132-1 to 132-x, and the Bloom filters 134-1 to 134-x that constitute the key value store 120 described above are preferably for enabling high-speed data operations.
  • the data can be stored in a primary storage device such as a RAM (Random Access Memory) included in the computer apparatus 100.
  • the computer apparatus 100 further includes a buffer preparation unit 102, a key addition unit 104, a LOUDS construction unit 106, a key inquiry unit 108, and a LOUDS combination unit 110 as functional units that manage the key value store 120. .
  • the buffer preparation unit 102 prepares a new input buffer trie tree every time the number of data input to the input buffer trie tree 122 reaches a certain number n, and constructs an input buffer trie tree that has reached the certain number n. This is set as the buffer trie tree 124 for use.
  • the key adding unit 104 receives keys and values constituting an input data set, and inputs the keys and values. Append to the trie of the buffer trie tree 122.
  • the key is not particularly limited, but is a character string, and the value is an object of an arbitrary type associated with a unique integer.
  • an integer value is associated with a key.
  • the LOUDS construction unit 106 scans each node in the trie tree maintained by the construction buffer trie tree 124 and constructs the lower LOUDS 142 representing the trie tree. , Construct a corresponding Bloom filter 144.
  • the constructed LOUDS and Bloom filter are referred to as the constructed LOUDS 142 and the constructed Bloom filter 144.
  • the new set 140 including the construction LOUDS 142 and the construction Bloom filter 144 is added to the search LOUDS group 130, while the construction buffer trie tree 124 is excluded from the search target.
  • the construction buffer trie tree 124 excluded from the search target is dumped from the RAM to a secondary storage device such as an HDD (Hard Disk Drive) or erased from the RAM.
  • HDD Hard Disk Drive
  • the conditions that trigger the preparation of the new input buffer trie tree 122 and the LOUDS construction are not particularly limited.
  • threshold values are set for the number of data and time, the threshold values are not limited to constant values. The distribution can be set as appropriate in consideration of the distribution).
  • the key inquiry unit 108 acquires a key (hereinafter referred to as an inquiry key) included in the key inquiry request in response to a key inquiry request generated in the computer apparatus 100 or a key inquiry request received from the outside. An inquiry is made to the actual data structure group of the key value store 120. The key inquiry unit 108 also acquires a value corresponding to the inquiry key as an inquiry result from the actual data structure group, and returns it to the request source.
  • an inquiry key a key included in the key inquiry request in response to a key inquiry request generated in the computer apparatus 100 or a key inquiry request received from the outside. An inquiry is made to the actual data structure group of the key value store 120.
  • the key inquiry unit 108 also acquires a value corresponding to the inquiry key as an inquiry result from the actual data structure group, and returns it to the request source.
  • the key inquiry unit 108 searches for an inquiry key in the order of the input buffer trie tree 122 and the construction buffer trie tree 124 if there is one being constructed. If the inquiry key is not found in the buffer trie trees 122 and 124, the key inquiry unit 108 subsequently makes an inquiry to the search LOUDS group 130.
  • the key inquiry unit 108 In the inquiry to the search LOUDS group 130, the key inquiry unit 108 tries to search the lower LOUDS 132-1 to 132-x in order from the newest one. At that time, prior to the search for the lower LOUDS 132, the key inquiry unit 108 confirms the possibility that the inquiry key exists in the corresponding lower LOUDS 132 with respect to the corresponding Bloom filter 134. If a positive result is obtained from the Bloom filter 134, the corresponding lower LOUDS 132 is queried, but if a negative result is obtained, the query for the lower LOUDS 132 itself is omitted and the next lower The search target is advanced to LOUDS. As a result, the key inquiry unit 108 acquires the value of the key stored in the key value store 120 (the latest value if there is a plurality), and returns it to the request source.
  • the LOUDS combiner 110 combines a plurality of lower LOUDSs 132 according to a given strategy to construct a higher LOUDS. Details of the LOUDS combining process will be described later.
  • FIG. 3 is a flowchart showing key addition processing for the key-value store, which is executed by the computer apparatus according to the present embodiment. The process shown in FIG. 3 is started from step S100 in response to, for example, the computer apparatus 100 being activated and the service corresponding to the key value store 120 being activated.
  • step S101 the key adding unit 104 waits for a data input request to be received and loops step S101 until the data input request is received (during NO). If it is determined in step S101 that a data input request has been received (YES), the process proceeds to step S102.
  • step S102 the key addition unit 104 receives the input data set (key and value).
  • step S103 the key addition unit 104 adds the key of the input data set to the input buffer trie tree 122, and Store the value of the input data set associated with the key.
  • step S104 the key addition unit 104 determines whether or not the number of new data added to the input buffer trie tree 122 is equal to or greater than the specified number n.
  • the number of new data can be counted using a counter that is reset each time a new input buffer is prepared and increments each time an input data set is added. If it is determined in step S104 that the number of new data is still less than the prescribed number n (NO), the process loops to step S101 and waits for the next data input request. On the other hand, if it is determined in step S104 that the number of new data has reached the specified number n or more (YES), the buffer preparation unit 102 is called and the process proceeds to step S105.
  • step S105 the buffer preparation unit 102 prepares a new input buffer trie tree 122 for accepting subsequent input data sets.
  • the buffer preparation unit 102 sets the old input buffer trie tree 122 that has reached the specified number n as the construction buffer trie tree 124.
  • step S ⁇ b> 107 the buffer preparation unit 102 calls the LOUDS constructing unit 106 to execute the LOUDS constructing process from the construction buffer trie tree 124. The details of the LOUDS construction process called in step S107 will be described later.
  • step S108 the buffer preparation unit 102 excludes the original construction buffer trie tree 124 from the search target, and the newly constructed construction LOUDS 142 and construction bloom filter 144 A new set 140 is added to the search LOUDS group 130. After step S108, the process loops again to step S101.
  • the input data set is sequentially added to the key value store 120 online, and the dynamic trie tree is obtained by the LOUDS construction process performed every time the new input number reaches the specified number n.
  • the overall size of the key value store 120 is reduced.
  • FIG. 4 is a flowchart showing key inquiry processing for the key-value store, which is executed by the computer apparatus according to the present embodiment.
  • the process shown in FIG. 4 is started from step S200 in response to the activation of the service corresponding to the key value store 120, similarly to the key addition process.
  • step S201 the key inquiry unit 108 waits for reception of a data inquiry request, and loops step S201 until the data inquiry request is received (during NO). If it is determined in step S201 that a data inquiry request has been received (YES), the process proceeds to step S202.
  • step S202 the key inquiry unit 108 inquires of the input buffer trie tree 122 about the inquiry key.
  • step S ⁇ b> 203 the key inquiry unit 108 determines whether an inquiry key has been found in the input buffer trie tree 122. If a positive result is obtained in step S203 and it is determined that the query key is found in the input buffer trie tree 122 (YES), the process proceeds to step S213.
  • step S213 the key inquiry unit 108 reads a value corresponding to the inquiry key from the input buffer trie tree 122, and returns it to the request source as a response to the key inquiry request.
  • step S204 the key inquiry unit 108 inquires of the construction buffer trie tree 124 about the inquiry key.
  • step S205 the key inquiry unit 108 determines whether or not an inquiry key is found in the construction buffer trie tree 124. If a positive result is obtained in step S205 and it is determined that the inquiry key is found in the construction buffer trie tree 124 (YES), the process proceeds to step S213. In this case, in step S213, the key inquiry unit 108 reads a value corresponding to the inquiry key from the construction buffer trie tree 124, and returns a value corresponding to the inquiry key as a response to the key inquiry request.
  • step S205 if a negative result is obtained in step S205 and it is determined that the inquiry key is not found in the construction buffer trie tree 124 (NO), the process proceeds to step S206. Note that if the construction buffer trie tree 124 does not exist, a negative result is obtained.
  • step S207 the key inquiry unit 108 requests the Bloom filter 134 of the lower LOUDS 132 to confirm the presence of the inquiry key prior to making an inquiry to the lower LOUDS 132 itself to be processed in the loop.
  • step S208 the key inquiry unit 108 determines from the result returned from the Bloom filter 134 whether there is a possibility that an inquiry key may be included in the lower LOUDS 132.
  • step S208 when a negative result is returned from the Bloom filter 134 and it is determined that there is no possibility that the query key is included in the lower LOUDS 132 (NO), the process branches to the loop end shown in step S211.
  • YES if a positive result is returned from the Bloom filter 134 in step S208 and it is determined that there is a possibility that an inquiry key is included in the lower LOUDS 132 (YES), the process branches to step S209.
  • step S209 the key inquiry unit 108 makes an inquiry to the lower LOUDS 132 itself.
  • step S ⁇ b> 210 the key inquiry unit 108 determines whether or not an inquiry key is found in the lower LOUDS 132. If a positive result is obtained in step S210 and it is determined that the inquiry key is found in the lower LOUDS 132 (YES), the process proceeds to step S213. In this case, in step S213, the key inquiry unit 108 reads the value corresponding to the inquiry key from the lower LOUDS 132 that is the processing target in the loop, and returns the value corresponding to the inquiry key as a response to the key inquiry request. To do.
  • step S210 when a negative result is obtained in step S210 and it is determined that the inquiry key is not found in the lower LOUDS 132 (NO), the process branches to the loop end shown in step S211 and the next lower lower LOUDS 132 is reached. And proceed with the search process. Even if the loop from step S206 to step S211 is repeated, if no inquiry key is found from any of the lower LOUDSs 132-1 to 132-x in the search LOUDS group 130, the loop from step S206 to step S211 is exited, and step S212 is executed. The process proceeds. In step S212, the key inquiry unit 108 returns a response without an inquiry key to the request source.
  • the value corresponding to the key can be efficiently obtained from the key value store 120 and returned to the request source by the processing flow shown in FIG.
  • the Bloom filter 134 confirms that the inquiry key exists probabilistically, and then the inquiry is made only to the lower level LOUDS 132 that may exist. For this reason, the number of accesses to the lower LOUDS 132 itself can be reduced, and the overall read performance is not substantially affected by the number of lower LOUDS 132 that increases with the total number N of data.
  • the input data set is newly added by omitting the confirmation of the existence of the input data set for convenience of explanation.
  • the key query process is performed, and it is confirmed that the input data set does not exist in the key value store 120. It is good also as a mixed transaction which performs data operation of.
  • the data operation can be performed as an overwrite update.
  • the actual data structure is queried in order from the newest one as shown in FIG. , The latest value will be obtained.
  • the LOUDS construction unit 106 scans each node in the trie of the construction buffer trie tree 124 to construct the construction LOUDS 142 that represents the trie tree and constructs the corresponding construction Bloom filter 144. .
  • the LOUDS constructing unit 106 performs a bit-first scan on each node in the trie tree, a bit string representing the skeleton part of each node of the trie tree, and a symbol string describing an edge extending to each node of the trie tree A bit string indicating whether each node of the trie tree corresponds to the end of the key and an array of values corresponding to each key of the trie tree are generated.
  • the LOUDS construction unit 106 further carries out k hash values calculated for each node of the trie tree as the intermediate value of the hash calculation of the child node while performing the breadth-first scanning, and the node corresponding to the end of the key. Validates the k hash values calculated for.
  • the first function is an alphabet acquisition function (alphabet (node)) that gives, for a given node, a symbol described by an edge attached to the node.
  • the second function is a first child node acquisition function (firstChild (node)) that gives a first child node for a given node.
  • first child node corresponds to a child node having the smallest alphabet among the child nodes of the node.
  • the magnitude relationship of alphabets is defined as increasing in alphabetical order.
  • the third function is a sibling node acquisition function (Sibling (node)) that gives the next sibling node whose parent is the same node for a given node (node).
  • FIG. 5 is a diagram schematically illustrating the alphabet acquisition function (alphabet (node)), the first child node acquisition function (firstChild (node)), and the sibling node acquisition function (Sibling (node)).
  • the first child node acquisition function (firstChild (S0)) of the node S0 returns the node S1 with the edge of the smallest alphabet “a” among the alphabets “a”, “b”, and “c”.
  • the alphabet acquisition function (alphabet (S1)) of the node S1 returns the alphabet “a”.
  • the sibling node acquisition function (Sibling (S1)) of the node S1 returns the node S2 to which the edge of the alphabet “b” next to “a” is attached.
  • the sibling node acquisition function (Sibling (S2)) of the node S2 returns the node S3 with an edge of the alphabet “c” next to “b”.
  • scanning is performed in the width direction from the first child node of the root to the sibling node using the root as a starting point.
  • scanning in the width direction is performed for each level, such as the first child node of the first child node of the root and its sibling node, and the first child node of the second child node of the root and its sibling node.
  • FIG. 6 is a diagram schematically illustrating a process of constructing the construction LOUDS 142 and the construction Bloom filter 144 from the construction buffer trie tree 124.
  • BASE is a bit string (BitBuffer) representing the skeleton part of the trie tree.
  • EDGE is a symbol string (CharBuffer) describing an edge extending to each node of the trie tree.
  • LEAF is a bit string (BitBuffer) indicating whether each node of the trie tree corresponds to the end of the key, and
  • VAL is an array (IntBuffer) that stores an integer corresponding to the key stored in the trie tree.
  • the LOUDS construction process will be described along with an example.
  • the highest route also called Super Root
  • the bit string “10” is added to the BASE.
  • a bit string “110” including “1” corresponding to the number of child nodes of the route r and subsequent “0” is added to the BASE.
  • the nodes S1 and S2 are visited in order following the route r by the width priority scan.
  • a bit string “110” including “1” corresponding to the number of child nodes and subsequent “0” is added to the BASE.
  • a bit string “10” including “1” corresponding to the number of child nodes and “0” subsequent thereto is added to the BASE.
  • each bit “0” is added to the BASE corresponding to each of the child nodes S3 to S5 of the nodes S1 and S2.
  • a BASE bit string is constructed by the width-first scan.
  • the LOUDS construction process will be described with respect to the LEAF variable, the EDGE variable, and the VAL variable with reference to FIG.
  • the nodes are visited in the order of the route r and the nodes S1, S2, S3, S4, and S5 by the width priority scanning.
  • bit “0” indicating that route r is not the end of the key is added to LEAF corresponding to route r.
  • the symbol “a” described by the edge extended to the node S1 and the bit “0” indicating that the node S1 does not correspond to the end of the key are added to EDGE and LEAF, respectively.
  • the symbol “b” and the bit “0” are added to EDGE and LEAF, respectively, corresponding to the node S2.
  • edge “b” and bit “1” indicating that node S3 corresponds to the end of the key are added to EDGE and LEAF, respectively, corresponding to node S3.
  • the bit “1” of the node S3 is additionally written, and the integer value “10” is stored in the VAL in association with the key (character string ab) represented by the node from the route r to the node S3.
  • an array of LEAF bit strings, EDGE symbol strings, and VAL integers is constructed along with the BASE by width-first scanning.
  • the Bloom filter is configured as a bit array that holds valid “1” or invalid “0” values corresponding to hash values.
  • a PUT function is defined in the Bloom filter, and when the PUT function is called, a value in the bit array corresponding to a given hash value is validated. In the initial state of the Bloom filter bit array, all values are “0”, the PUT function is called for the node corresponding to the end of the key, and the bits corresponding to the k hash values are “1”. To be rewritten.
  • a hash value is calculated from the hash intermediate value (node (S3) .h) of the node S3, and the PUT function is called corresponding to the end of the key, and the calculated k pieces
  • FIG. 7 illustrates the data structure of the construction LOUDS 142 and the construction Bloom filter 144 constructed by the LOUD construction processing of the present embodiment.
  • the construction LOUDS 142 is configured as a bit string BASE, a symbol string EDGE, a bit string LEAF, and a key value array VAL.
  • the construction Bloom filter 144 holds a valid “1” or an invalid “0” corresponding to k hash values calculated from k hash functions. Configured as an array. In the construction Bloom filter 144 in which the construction processing is completed, the bit array is rewritten to “1” by the PUT function, while the bit corresponding to the hash value of the node corresponding to the end of the key is changed to the other hash value. The corresponding bit remains “0”.
  • FIGS. 8 and 9 are flowcharts showing the LOUDS construction process executed by the computer apparatus according to the present embodiment.
  • the processes shown in FIGS. 8 and 9 are called in step S107 shown in FIG. 3, and are started from step S300.
  • step S301 the LOUDS construction unit 106 first creates an empty queue for width-first scanning, and the bit array of the above-described empty BASE, empty EDGE, empty LEAF, empty VAL, and 0-cleared Bloom filter. To do.
  • the LOUDS construction unit 106 sets the hash initial value for the root to 0 in step S302, adds “10” to the BASE corresponding to the highest root (super root) in step S303, and gives priority to the width in step S304.
  • the root r of the trie tree is added to the queue.
  • step S305 the LOUDS construction unit 106 determines whether or not the queue is empty. If it is determined in step S305 that the queue is not empty (NO), the process branches to step S306. In step S306, the LOUDS construction unit 106 takes out a node from the head of the queue and visits the node. In the first step S306, the route added in step S304 is taken out, and in the subsequent step S306, the node added in step S310 described later is taken out.
  • step S307 the LOUDS construction unit 106 calculates the hash value of the node from the hash intermediate value of the node (the hash initial value corresponds if the node is the root).
  • the hash function will be described with a specific example.
  • the hash value (h) for the character string s [0,..., S.length]
  • the hash value (h) can be calculated from the hash intermediate value (node.h).
  • the character string (s) is expressed by a continuous numerical value
  • the variable (s.length) represents the position of the end of the character string (s)
  • the element (s [i ]) Is a numerical value representing the symbol at position i in the character string (s).
  • the constant (P) is a prime number close to the number of types of symbols used, and when the symbols are represented by ASCII characters, for example, a value of “131” can be used.
  • the pseudo code and the equation (1) are examples, and the hash value for each key may be applied to any hash function in which an intermediate value common to keys having a common prefix is used. it can.
  • the k hash functions may be prepared using different constants (P) in the above formula (1), or may be prepared using different initial values in the above formula (1).
  • a sufficiently wide hash value may be generated and divided at a predetermined position to prepare k hash functions.
  • step S308 the LOUDS construction unit 106 attempts to acquire the first child node of the node using the first child node acquisition function.
  • step S309 the process branches depending on whether there is a node. If it is determined in step S309 that there is a node (YES), the process branches to step S310.
  • step S310 the LOUDS construction unit 106 adds a child node of the node to the queue.
  • step S311 the LOUDS construction unit 106 sets the hash value (h) calculated in step S307 as the hash intermediate value (child.h) of each child node of the node, and takes over the intermediate value being calculated. .
  • step S312 the LOUDS construction unit 106 tries to acquire the next sibling node of the node using the sibling node acquisition function, and the process proceeds to step S309.
  • step S313 the LOUDS constructing unit 106 adds the same number of “1” as the child node of the node and “0” subsequent thereto to the BASE.
  • step S314 the LOUDS constructing unit 106 uses the alphabet acquisition function to acquire the character described by the edge extended to the node, and adds the alphabet of the node to EDGE.
  • step S315 the LOUDS construction unit 106 determines whether or not the visited node is a “leaf” corresponding to the end of the key.
  • a special character that appears only at the end is added to the end of the key.
  • the node on the bottom side can be determined as a “leaf”.
  • An embodiment in which a special character that appears only at the end is not used, and a termination flag is introduced and the key value is stored for the intermediate node is also represented by the bottom node and the intermediate node in which the termination flag is set. Is determined to be “leaf”.
  • step S315 If it is determined in step S315 that it is not “leaf” (NO), the process branches to step S316.
  • step S316 the LOUDS construction unit 106 adds “0” to LEAF, and loops the process through step B to step S305 shown in FIG.
  • step S317 if it is determined in step S315 that it is “leaf” (YES), the process branches to step S317.
  • step S317 the LOUDS construction unit 106 adds “1” to LEAF, and in step S318, adds a value corresponding to the key indicating the end of the node to VAL.
  • step S319 the LOUDS construction unit 106 calls the Bloom filter PUT function, validates and registers the bit array values corresponding to the k hash values calculated for the node, and passes the points B through FIG. To step S305 shown in FIG. By including a bit related to the route in the LEAF, a trie tree including only one character string having a length of 0 can be handled correctly.
  • step S305 if it is determined in step S305 that the queue is empty and the end of the width priority scan of the trie tree has been reached (YES), the process branches to step S320.
  • step S320 the LOUDS construction unit 106 creates two indexes (BASE_RANK, BASE_SELECT) for the generated BASE.
  • BASE_RANK is referred to as a Rank Bit Directory, and can return the number of “0” (or “1”) from 0 to a given i in the BASE bit array in a constant time. It is a possible index. For example, BASE_RANK 0 (s, i) is s [0,. . . , I] is returned, and BASE_RANK 1 (s, i) is s [0,. . . , I], the number of “1” is returned.
  • BASE_SELECT is referred to as a select bit directory, and the position of the (i + 1) th “0” (or “1”) in a given BASE bit array is a constant time.
  • the index to answer For example, BASE_SELECT 0 (s, i) answers the (i + 1) th “0” position, and BASE_SELECT 1 (s, i) answers the (i + 1) th “1” position.
  • the above two indexes (BASE_RANK, BASE_SELECT) define two types of operations for BASE so that the first child node, sibling node, parent node, final child node, etc. of a specific node can be acquired. Become. That is, the above-described first child node acquisition function and sibling node acquisition function are also provided for the LOUDS data structure.
  • the index (BASE_RANK, BASE_SELECT) can be constructed using an extra memory space of o (l) bits, where l is the length of BASE. For details of BASE_RANK and BASE_SELECT, see Non-Patent Document 4.
  • step S321 the LOUDS construction unit 106 creates an index (LEAF_RANK) for LEAF by the same method as that described for BASE in step S320 described above, and ends the LOUDS construction processing in step S322.
  • the new set 140 of the construction LOUDS 142 and the construction Bloom filter 144 is constructed from the construction buffer trie tree 124 by the processing described above with reference to FIGS.
  • the construction LOUDS 142 and the construction Bloom filter 144 are constructed by a single breadth-first scan, the construction is performed even when the construction LOUDS 142 and the construction Bloom filter 144 are constructed separately. Calculation cost is reduced.
  • the construction LOUDS 142 is a concise data structure with essentially high memory utilization efficiency
  • the construction Bloom filter 144 is also smaller than the construction LOUDS 142 and constructed with a memory usage corresponding to the number of keys. Therefore, the key value store 120 as a whole can store keys with high space efficiency.
  • FIG. 10 is a diagram for explaining LOUDS combining processing.
  • the LOUDS combining unit 110 combines a plurality of lower LOUDSs according to a certain strategy and constructs a higher LOUDS.
  • the LOUDS combining unit 110 performs a breadth-first scan using a combined route obtained by combining the routes of trie trees represented by a plurality of lower-level LOUDS as a starting point, so that the combined LOUDS expressing the combined trie tree and the corresponding connection Build a Bloom filter.
  • the combined trie tree is configured by merging a plurality of trie trees represented by the plurality of lower-level LOUDS. As a result of the combination, the number of lower LOUDS is suppressed and overlapping prefixes are shared, so that the data size is also compressed.
  • the above-described combining strategy is described in advance by an administrator or the like as a condition that triggers the combining process (hereinafter referred to as a combining condition).
  • the joining condition is not particularly limited.
  • FIG. 10 in response to the fact that a total of two lower-level LOUDS at the same level are set in the search LOUDS group 130, two LOUDS 150- It is possible to adopt a condition that the combination process is called with 1,150-2 as a combination target.
  • the lower LOUDS constructed directly from the input buffer trie tree 122 is referred to as Level 1 LOUDS
  • Level 2 LOUDS the combination of two Level 1 LOUDSs
  • two Level1 LOUDS 150-1 and 150-2 are combined to generate a combined LOUDS 162 and a corresponding combined Bloom filter 164 set 160.
  • the set 160 including the combined LOUDS 162 and the combined Bloom filter 164 is added to the search LOUDS group 130 as Level2LOUDS, while the previous two Level1 LOUDS 150-1 and 150-2 are added to the search LOUDS. Excluded from group 130.
  • the excluded Level 1 LOUDS 150-1 and 150-2 are dumped from the RAM to a secondary storage device such as an HDD, or deleted from the RAM.
  • FIG. 11 is a flowchart showing a main flow of the combination process in the key-value store, which is executed by the computer apparatus according to the present embodiment.
  • the process shown in FIG. 11 is started from step S400 in response to the activation of the service corresponding to the key value store 120, for example.
  • step S401 the LOUDS coupling unit 110 waits for establishment of a preset coupling condition, and loops step S401 until the coupling condition is established (during NO). If it is determined in step S401 that the combining condition is satisfied (YES), the process proceeds to step S402. Here, it is assumed that the combining process is called in response to a total of two lower LOUDSs 150 being set in the search LOUDS group 130.
  • step S402 the LOUDS combining unit 110 sets two lower LOUDSs 150 according to the established combination condition as a combination target.
  • step S ⁇ b> 403 the LOUDS combining unit 110 executes a LOUDS combining process that combines the two lower LOUDSs 150 set as the combination targets. Details of the LOUDS combining process called in step S403 will be described later.
  • step S404 the LOUDS combining unit 110 adds the newly constructed combined LOUDS 162 and combined bloom filter 164 set 160 to the search LOUDS group 130.
  • step S ⁇ b> 405 the LOUDS combiner 110 excludes the set of two combined lower LOUDS 150 and bloom filter 152 from the search LOUDS group 130. Thereafter, the process loops again to step S401.
  • a total of M (M is a natural number of 2 or more) LOUDS is set in the search LOUDS group 130.
  • the coupling process can be called (M ⁇ 1) times for each LOUDS as a coupling target.
  • a combined LOUDS combining a total of M LOUDS and a corresponding combined Bloom filter are constructed.
  • it is not impeded to extend the combining process, which will be described in detail later, to combine three or more LOUDSs together to construct a combined LOUDS and a corresponding combined Bloom filter.
  • the LOUDS combining unit 110 performs a bit-first scan on each node in each trie tree of the two LOUDSs 150 to be combined, while representing a skeleton portion of each node of the above combined trie tree, and the combined trie tree.
  • a symbol string describing an edge extending to each node, a bit string indicating whether each node of the combined trie tree corresponds to the end of the key, and an array of values corresponding to each key of the combined trie tree are generated.
  • the LOUDS combining unit 110 further corresponds to the end of the key while taking over the k hash values calculated for each node of the combined trie tree as the intermediate value of the hash calculation of the child node while performing the breadth-first scanning. Validates the k hash values calculated for the node.
  • the LOUDS combining unit 110 obtains an alphabet for each node (node1, node2) of the two trie trees (T1, T2) related to the established connection condition.
  • functions alphabet (node1), alphabet (node2)
  • first child node acquisition function firstChild (node1), firstChild (node2)
  • sibling node acquisition function Sibling (node1), Sibling (node2)
  • M coupled node
  • the first function is an alphabet acquisition function (alphabet (M (node1, node2))) that gives a symbol described by an edge to a given connection node (M (node1, node2)).
  • the alphabet acquisition function (alphabet (M (node1, node2))) is calculated using the following equation (2). According to the following formula (2), the smallest alphabet among the nodes (node1, node2) of the trie tree (T1, T2) related to the connection is returned.
  • the second function is a first child node acquisition function (firstChild (M (node1, node2))) that gives the first child node of the combination node for a given connection node (M (node1, node2)).
  • the first child node here is the first child node of the connection node in the connection trie tree (Tm).
  • the first child node acquisition function (firstChild (M (node1, node2))) is calculated using the first child node acquisition function (firstChild (node)) defined for the trie tree by the following equation (3).
  • the cursor position of both trie trees is advanced, and a new joining node (M (firstChild (node1) ), FirstChild (node2))) is returned.
  • This new combined node is a recursive combination of the child nodes of each node before the combination.
  • the cursor position of the smaller trie tree among the nodes (node1, node2) of the trie tree (T1, T2) related to joining is advanced.
  • the first child node hanging from the smaller node is returned.
  • the third function is a sibling node acquisition function (Sibling (M (node1, node2)) that gives the next sibling node whose parent is the same node as the given joining node (M (node1, node2)). ))).
  • the sibling node acquisition function (Sibling (M (node1, node2))) is calculated using the following equation (4).
  • the cursor position of both trie trees is advanced, and a new combined node (M (Sibling (node1) ), Sibling (node2))) is returned.
  • the cursor position of the larger trie tree of the two trie nodes (node1, node2) for joining is maintained
  • the cursor position of the smaller trie tree is advanced, and the sibling node (Sibling (node)) of the smaller node and the combined node of the larger node (node) are returned.
  • nodes (node1, node2) of each trie tree (T1, T2) having a specific alphabet “a” are represented as nodes a1, a2, respectively.
  • FIG. 12B shows an alphabet acquisition function (alphabet (M (b1, c2)) when the alphabet of the node of the trie tree T1 is smaller than the alphabet of the node of the trie tree T2 (alphabet (b1) ⁇ alphabet (c2)). )), A first child node acquisition function (firstChild (M (b1, c2))), and a sibling node acquisition function (Sibling (M (b1, c2))) will be schematically described.
  • FIG. 12C shows an alphabet acquisition function (alphabet (M (d1, c2)) when the alphabet of the node of the trie tree T1 is larger than the alphabet of the node of the trie tree T2 (alphabet (d1)> alphabet (c2)). )), A first child node acquisition function (firstChild (M (d1, c2))), and a sibling node acquisition function (Sibling (M (d1, c2))) will be schematically described.
  • the LOUDS combining unit 110 uses the above function group to combine the routes (r1, r2) of the routes (r1, r2) of a plurality of trie trees (T1, T2) as shown in FIG. ) As a starting point, each node of the plurality of trie trees (T1, T2) related to the coupling is visited so as to perform the breadth-first scanning for the assumed coupled trie tree shown in FIG. Thereby, the LOUDS combining unit 110 constructs a set 160 of the combined LOUDS 162 and the combined bloom filter 164 that express the combined trie tree (Tm).
  • FIG. 13 is a flowchart showing the LOUDS combining process executed by the computer apparatus according to the present embodiment. Note that the processing between point A and point B in FIG. 13 is the same as the float of the LOUDS construction processing shown in FIG. The processes shown in FIGS. 13 and 9 are called in step S403 shown in FIG. 11 and are started from step S500.
  • the LOUDS combiner 110 first includes an empty queue for breadth-first scanning, the above-described empty BASE for combined LOUDS, empty EDGE, empty LEAF, empty VAL, and zero-cleared combined Bloom filter. Create a bit array for.
  • the LOUDS combining unit 110 sets the hash initial value for the root to 0 in step S502, adds “10” to the BASE corresponding to the highest root (super root) in step S503, and gives priority to the width in step S504.
  • a joining route (M (r1, r2)) of two trie trees (T1, T2) related to joining is added to the queue.
  • step S505 are substantially the same as steps S305 to S322 shown in FIGS. 8 and 9 except that the execution subject is the LOUDS combining unit 110 instead of the LOUDS constructing unit 106. .
  • step S318 if the keys overlap between the two trie trees (T1, T2), the value corresponding to the newer lower LOUDS 150 may be given priority. Since the other processes are generally the same, detailed description is omitted.
  • FIGS. 15 and 16 show that the combined trie tree (Tm) is virtually obtained by tracing the two trie trees (T1, T2) illustrated in FIG. 14A by the processes shown in FIGS. It is a figure explaining a mode that it is traced.
  • FIG. 15A is a diagram illustrating a state in which child nodes immediately below the combined route (M (r1, r2)) are listed when the combined route (M (r1, r2)) is visited.
  • the connection node (M (a1, a2)) is acquired as the first child node by the operation shown in FIG. Is done.
  • the sibling node acquisition function is called sequentially, the cursor position is advanced, and the join node is used as the sibling node of the join node (M (a1, a2)).
  • M (b1, f2)) and the join node (M (null, f2)) are acquired in order.
  • the node b1 and the node f2 are the sibling node b1 of the node a1 in the first trie tree (T1) and the sibling node f2 of the node a2 in the second trie tree (T2).
  • the join node (M (a1, a2)) is scanned first, but the join node (M (b1, f2)) and join node (M (null, f2)) are scanned.
  • the first child node acquisition function scans the child node e1 hanging from the node b1 of the first trie tree (T1) and the child node f2 hanging from the node f2 of the second trie tree (T2), respectively.
  • FIG. 15B shows a state in which the child nodes immediately below the joining node (M (a1, a2)) are listed when the joining node (M (a1, a2)) is visited as an example.
  • the combination node (M (c1, d2)) is acquired as the first child node.
  • the nodes c1 and d2 are the first child node c1 of the node a1 in the first trie tree (T1) and the first child node d2 of the node a2 in the second trie tree (T2).
  • the sibling node acquisition function is sequentially called, and as the sibling nodes, the join node (M (g1, d2)) and the join node (M (g1, null) )) Is acquired sequentially.
  • the node g1 is a sibling node b1 of the node c1 in the first trie tree (T1).
  • connection node (M (a1, a2)) in the connection trie tree (Tm) are enumerated and put into the queue.
  • join node (M (c1, d2)), join node (M (g1, d2)), and join node (M (g1, null)) are sequentially scanned, “c”, “d” are sequentially obtained by the alphabet acquisition function. ",” G "are listed in ascending order.
  • each of the join nodes (M (c1, d2)), join node (M (g1, d2)) and join node (M (g1, null)) Child nodes are sequentially acquired by the first child node acquisition function and the sibling node acquisition function, and are sequentially placed in the queue.
  • FIG. 16 (A) shows a state in which the child nodes immediately below are listed when the joined node (M (c1, d2)) is visited by the first child node acquisition function and the sibling node acquisition function.
  • FIG. 16B shows a state in which the child nodes immediately below are listed when the joining node (M (g1, d2)) is visited.
  • the flow illustrated in FIG. 15 and FIG. 16 is equivalent to width-first scanning of each node of the combined trie tree (Tm) in which two trie trees (T1, T2) are combined.
  • the scanning to be performed is performed on two trie trees (T1, T2).
  • the set 160 of the combined LOUDS 162 and the combined Bloom filter 164 is constructed from the two lower LOUDS 150-1 and 150-2.
  • both the combined LOUDS 162 and the combined Bloom filter 164 are constructed by performing breadth-first scanning of the trie tree of the lower LOUDS 150 once, so that the combined LOUDS 162 and the combined Bloom filter 164 are constructed separately. Even in comparison, the calculation cost for the combining process is reduced.
  • the set 160 is directly constructed by performing the breadth-first scanning of the trie tree of the lower LOUDS 150 once, after the trie trees (T1, T2) of the lower LOUDS 150 are once combined to construct the combined trie tree (Tm).
  • T1, T2 trie trees
  • Tm combined trie tree
  • the combined LOUDS 162 is a concise data structure with essentially high memory utilization efficiency
  • the combined Bloom filter 164 is also smaller than the combined LOUDS 162 and constructed with a memory usage corresponding to the number of keys.
  • the number of lower LOUDS is suppressed by the combining process, the common prefix is compressed, and the space efficiency can be further improved.
  • the read performance for the key-value store 120 does not substantially depend on the number of lower-level LOUDS. Therefore, when the load applied to the entire system by the joining process cannot be ignored, the joining process is preferably performed. It becomes possible to delay later.
  • the configuration of combining the two LOUDSs 150 is generalized, and an alphabet acquisition function, a first child node acquisition function, and a sibling node acquisition function corresponding to the alphabet size relationship of each trie node are obtained.
  • it can be extended to more than two LOUDS combining processes. Assuming that one of the two joining nodes to be joined is a joining node recursively (M (n1, M (n2, M (n3,...))) And solving it recursively, 3 A general solution for more than one LOUDS combining process can be obtained.
  • the alphabet of the root r (T) of an arbitrary tree T is always equal (for example, the character string always starts with the symbol “$”).
  • the height of the tree T indicates the maximum value of the path length from the root r (T) to an arbitrary leaf.
  • the height of a tree consisting only of the root is 1, and the height of a tree in which only a leaf exists directly under the root is 2.
  • connection between two trees T1 and T2 having a height of 1 is determined by the alphabet acquisition function (alphabet (r (T1), t (T2))).
  • the alphabet acquisition function alphabet (r (T1), t (T2))
  • firstChild first child node acquisition function
  • sibling sibling node acquisition function
  • a tree height h> 1 is assumed, and it is assumed that a correct coupled tree scan is executed by the above-described coupling operation on arbitrary trees T1 and T2 having a height (h-1) or less. .
  • the alphabet acquisition function (alphabet (r (T1), r (T2)) is called in the early stage of scanning, and this obviously determines the root of the connection tree.
  • the cursor positions for scanning the trees T1 and T2 are the first child node of the root in the tree T1 (firstChild (r (T1))) and the first child node of the root in the tree T2 (firstChild (r (T2))), respectively. Move to.
  • (1) When the first child node (firstChild (r (T1))) of the root in the tree T1 does not exist, it means that the scanning of the tree T1 has been completed, and from then on, the firstChild will always be the first child.
  • the first child node One node Z of the connection tree is newly created according to the definition of the acquisition function (firstChild (M (r (T1), r (T2)))). Since the height of the tree having the new node Z as a root is equal to or less than h ⁇ 1, the connection is correctly performed based on the assumption of induction. Furthermore, since the tree having the new node Z as the root is correctly created, the node Z itself also corresponds to the correct connection from the way of creating the node Z.
  • sibling node acquisition function sibling (M (node1, node2))
  • breadth-first scanning which is also the same as that performed by the first child node acquisition function described above.
  • FIG. 17 shows a schematic hardware configuration of the computer apparatus of this embodiment.
  • the computer apparatus 100 shown in FIG. 17 is capable of processing by a central processing unit (CPU) 12, a cache memory 14 having levels such as L1 and L2 that enable high-speed access of data used by the CPU 12, and the CPU 12.
  • a system memory 16 formed from a solid-state memory device such as a DRAM.
  • the CPU 12, cache memory 14 and system memory 16 are connected via a system bus 18 to other devices or drivers, such as a graphics driver 20 and a network interface card (NIC) 22.
  • the graphics driver 20 is connected to an external display 24 via a bus, and can display a processing result by the CPU 12 on a display screen.
  • the NIC 22 connects the computer apparatus 100 to a network that uses an appropriate communication protocol such as TCP / IP at the physical layer level and the data link layer level.
  • an I / O bus bridge 26 is connected to the system bus 18.
  • a hard disk device 30 is connected to the downstream side of the I / O bus bridge 26 by an IDE, ATA, ATAPI, serial ATA, SCSI, USB, or the like via an I / O bus 28 such as PCI.
  • An input device 32 such as a keyboard and a pointing device such as a mouse is connected to the I / O bus 28 via a bus such as a USB, and a user interface is provided by the input device 32.
  • Any single-core processor or multi-core processor can be used as the CPU 12 of the computer apparatus 100.
  • the computer apparatus 100 is controlled by an operating system (hereinafter referred to as an OS) such as WINDOWS (registered trademark) 200X, UNIX (registered trademark), or LINUX (registered trademark).
  • OS operating system
  • the computer device 100 develops a program on the system memory 16 or the like under the management of the OS, executes the program, and controls the operation of each hardware resource. Realize on.
  • a processing program for constructing LOUDS alone was executed, and LOUDS was created independently from construction buffer trie tree 124 having a predetermined input size. Then, the calculation time taken to complete the process for constructing the LOUDS alone was measured. Further, for comparison, a program of processing for extracting a key from the generated LOUDS and separately constructing a Bloom filter is executed, and a Bloom filter is generated from the LOUDS generated from the construction buffer trie tree 124 having a predetermined input size. Then, the calculation time taken to complete the construction of the Bloom filter was measured.
  • Experimental examples of the LOUDS construction process (LOUDS + BF), the LOUDS single construction process (LOUDS alone), and the Bloom filter construction process (BF) performed with the number of input keys of the construction buffer trie tree as 6.5 million keywords Refer to 1, Experimental Example 2 and Experimental Example 3.
  • Experimental examples related to the LOUDS construction process (LOUDS + BF) and the LOUDS single construction process (LOUDS alone) performed using the buffer trie tree for constructing a plurality of input keys are referred to as Experimental Example 4 and Experimental Example 5, respectively. .
  • Experimental example 1 and experimental example 4 correspond to the examples.
  • FIG. 18A is a bar graph in which the calculation time (sec) measured for Experimental Example 1 to Experimental Example 3 is plotted.
  • FIG. 18B is a stacked bar graph showing the size of each data structure of the LOUDS and the Bloom filter (BF) constructed in Experimental Example 1.
  • FIG. 18B shows the size of the LOUDS and the Bloom filter, but the input size (6.5 million keywords) used in Experimental Example 1 consumes 9.4 bytes per keyword as a whole, and the Bloom filter is Accounted for about 6.8% of the size of LOUDS.
  • FIG. 19A is a line graph in which the computation time (sec) is plotted against the input size (number of keys) measured in Experimental Example 4 and Experimental Example 5 above.
  • a series (overhead) indicated by ⁇ is a difference in calculation time required for the LOUDS construction process (LOUDS + BF) and the LOUDS single construction process (LOUDS alone), and represents the generation cost of the Bloom filter. .
  • the increase amount of the overhead with respect to the input size is smaller than the increase amount of the LOUDS generation cost. That is, as the number of keys increases, the ratio of the Bloom filter generation cost to the whole decreases.
  • Example 7 An experimental example related to the key addition processing performed for the system (LOUDS + BF) shown in FIG. 2 and the system (LOUDS) excluding the configuration of the Bloom filter from the key value store 120 shown in FIG. Refer to Example 7.
  • Experimental Example 6 corresponds to the example.
  • FIG. 19B is a line graph in which the throughput measured in Experimental Example 6 and Experimental Example 7 is plotted against the number of keys input up to the time of measurement.
  • FIG. 19B with respect to both Experimental Example 6 and Experimental Example 7, it is observed that as the number of input keys increases, the overall throughput tends to decrease due to the overhead for constructing the LOUDS. It was done.
  • FIG. 19B when the above experimental example 6 and experimental example 7 shown in FIG. 19B are compared, a slight Bloom filter generation cost is recognized in the experimental example 6, but it is hidden by other costs. There was no significant difference between the seven. Therefore, it has been shown that the configuration of the Bloom filter generation does not cause significant performance degradation.
  • a system in which the Bloom filter configuration is removed from the key value store 120 shown in FIG. 2 is constructed on a computer device, and the same buffer size, combination factor, number of keywords, and Bloom filter configuration as described above are constructed. Configured a key-value store. Then, key inquiries were made to the configured key-value store, and the throughput at that time was measured.
  • Experimental Example 8 corresponds to the example.
  • FIG. 20 (A) is a bar graph in which the throughput measured in Experimental Example 8 and Experimental Example 9 is plotted separately for the case where the query key exists in the key-value store and the case where it does not exist.
  • FIG. 20A when inquiring with an existing inquiry key, a clear difference in throughput was not recognized. This is considered to be because any query for LOUDS occurs when inquiring with an existing query key.
  • the difference in throughput between Experimental Example 8 and Experimental Example 9 became significant, as shown in FIG.
  • Example 9 that does not include the Bloom filter
  • Example 8 that includes the Bloom filter
  • a system in which the Bloom filter configuration is removed from the key value store 120 shown in FIG. 2 is constructed on the computer device, and the same buffer size, combination factor, number of keywords, and Bloom filter configuration as described above are constructed. Configured a key-value store. Then, a mixed transaction was executed for the key-value store 120, and the throughput was measured.
  • Experimental Example 10 An experimental example related to the mixed transaction processing performed for the system (LOUDS + BF) shown in FIG. 2 and the system (LOUDS) excluding the configuration of the Bloom filter shown in FIG. 2 is referred to as Experimental Example 10 and Experimental Example 11, respectively.
  • Experimental example 10 corresponds to the example.
  • FIG. 20B is a bar graph in which the throughputs measured in Experimental Example 10 and Experimental Example 11 are plotted. Referring to FIG. 20B, even in a mixed transaction that is considered to be more realistic, the system that realizes the key-value store 120 shown in FIG. 2 has a higher throughput than the system that does not use the Bloom filter. Has improved significantly.
  • each subordinate in the key value store 120 is not increased at the time of construction.
  • Generating a Bloom filter for LOUDS has been shown to significantly improve the read performance of keys that are not specifically present in the store. This property is effective for key-value stores that hold keys and values while adding new keys.
  • an input including a new key of about 2.5% exhibits a performance difference of 2.5 times compared to the implementation without using the Bloom filter.
  • an information processing device that realizes a data store that stores keys with high space efficiency, can be built online, and has improved data operation performance, and the data store Can provide a data store operation method and program
  • a data construction device and a data construction method for efficiently constructing a trivial data structure and filter of a trie tree, and a simple data structure in which a plurality of trie trees are combined efficiently It is possible to provide a data combination apparatus and a data combination method for construction, and a program thereof.
  • the present invention can be applied not only to character strings that use single-byte characters as symbols as keys, but also to character strings of multi-byte characters such as Japanese, Chinese, Korean, and Arabic. Needless to say.
  • the above-described functions of the present invention are implemented by an apparatus written in an object-oriented programming language such as C ++, Java (registered trademark), JavaBeans (registered trademark), Java (registered trademark) Applet, JavaScript (registered trademark), Perl, Ruby, or the like. It can be realized by a possible program, stored in a device-readable recording medium and distributed or transmitted and distributed.
  • object-oriented programming language such as C ++, Java (registered trademark), JavaBeans (registered trademark), Java (registered trademark) Applet, JavaScript (registered trademark), Perl, Ruby, or the like.

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

 本情報処理装置100は、入力される入力キーを受け付けて、データストア120を構成しキーをツリー構造として維持するバッファ122に対し、該入力キーを追加するキー追加部104と、バッファ124が維持するツリー構造内のノードを走査して、該ツリー構造を表現する簡潔データ構造142を構築するとともに、該簡潔データ構造内にキーが存在することを近似的に判定するフィルタ144を構築する構築部106と、データストア120に対する照会キーの問い合わせに対応して探索を行う際に、簡潔データ構造132を探索するのに先だって、対応するフィルタ134に対し該簡潔データ構造132内に照会キーが存在することを確認する照会部108とを含む。

Description

情報処理装置、データストア操作方法、データ構築装置、データ構築方法、データ結合装置、データ結合方法およびプログラム
 本発明は、データストアに関し、より詳細には、キーを効率的に格納するデータストアを実現する情報処理装置、データストア操作方法、ツリー構造の簡潔データ構造を構築するデータ構築装置およびデータ構築方法、複数のツリー構造が結合された簡潔データ構造を構築するデータ結合装置およびデータ結合方法、並びにこれらのプログラムに関する。
 言語処理、ユーザ管理などのアプリケーションにおいて、単語、フレーズ、人名、URLなどの膨大な文字列をコンパクトにメモリに格納する技術に対する要望が高まっている。これは、文字列をキーとする空間効率の高いデータストアを実現すれば、多数の文字列を省メモリで管理し、応答性能およびスループットを向上させることが可能となり、ひいては上記言語処理やユーザ管理などのアプリケーションを効率よく実現できるようになるからである。
 ところで、情報理論において、要求される最小のメモリ使用量で実現されるデータ構造は、簡潔データ構造(Succinct Data Structure)と称される。ツリー構造を表現する簡潔データ構造として、LOUDS(Level Order Unary Degree Sequence)が知られている(非特許文献1)。LOUDSは、空間効率の高いデータ構造を有し、さらにツリー構造内の各ノードへ効率的にアクセスする操作も提案されている(非特許文献2)。このため、LOUDSは、データへのアクセス頻度が比較的高い用途においても好適に利用されている。
 上記ツリー構造として、トライ木(TRIE)が知られている。トライ木のリード性能は、トライ木に入力されたデータの個数にはよらず、キーの文字列長に依存するという特性を有する。このため、トライ木は、膨大なキーをメモリに効率良く格納することが求められる辞書などの用途で、好適に利用されている。また、種々のトライ木の実装方法が知られているが、トライ木をLOUDSで実装することにより、ダブルアレイ(Double-Array)での実装と比較して、4~10倍のメモリ効率を実現することができることが知られている(非特許文献3)。ハッシュ関数を使用するブルームフィルタによってキーを検索する技術も知られている(特許文献1)。
 上記トライ木のリード性能がキーの文字列長に依存するという特性は、LOUDSで実装する場合も同様である。しかしながら、トライ木をLOUDSで実装した場合、上述したダブルアレイなどのリンク構造を利用した実装に比較して、リード性能が一般的に低下してしまう。例えば、ダブルアレイによる実装と比較して10倍近い実行時間を必要とする実装例が報告されている(非特許文献3)。
 また、トライ木をLOUDSで実装した場合、空間効率が高いという利点があるものの、ダブルアレイなどのリンク構造を利用した実装とは異なり、構築済みのデータ構造に新たな文字列を追加することは通常困難である。LOUDSは、メモリ空間中に密に配置されたデータ構造であるため、一度完成したLOUDSに対し新たな文字列を追加するには、新たな文字列のノードを追加する箇所に隙間(ノードを現す1ビット)を作るべく、平均半分のデータを移動する必要がある。辞書表現など入力データが大きい場合は、上記データ移動のコストは非常に大きくなり、オンラインで辞書を構築する用途では許容することが難しい。
特開2008-011448号公報
G. Jacobson、"Space-efficient Static Trees and Graphs"、In Proceedings of the 30th Annual Symposium on Foundations of Computer Science (SFCS '89)、IEEE Computer Society、USA、1989、549-554 O'Neil Delpratt,Naila Rahman,and Rajeev Raman、"Engineering the LOUDS Succinct Tree Representation."、Lecture Notes in Computer Science、2006、Volume 4007/2006、134-145 岡野原 大輔、「大規模キー集合の効率的な格納法tx bep」、[online]、東京大学、[平成23年9月15日検索]、インターネット<URL:http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/papers/2007-1031-massiveKeys.pdf> Dong Kyue Kim,Joong Chae Na,Ji Eun Kim and Kunsoo Park、"Efficient Implementation of Rank and Select Functions for Succinct Representation,"、Experimental and Efficient Algorithms Lecture Notes in Computer Science、2005、Volume 3503/2005、125-143
 本発明は、上記従来技術に鑑みてなされたものであり、本発明は、キーを空間効率高く格納するとともに、オンライン構築が可能で、データ操作性能が改善されたデータストアを実現する、情報処理装置、該データストアを操作するデータストア操作方法およびプログラムを提供することを目的とする。
 本発明の他の目的は、トライ木の簡潔データ構造およびフィルタを効率的に構築するためのデータ構築装置およびデータ構築方法、複数のトライ木が結合された簡潔データ構造を効率的に構築するためのデータ結合装置およびデータ結合方法、並びにこれらのプログラムを提供することである。
 本発明では、上記課題を解決するために、以下の特徴を有する、情報処理装置を提供する。本情報処理装置は、入力される入力キーを受け付けて、データストアを構成しキーをツリー構造として維持するバッファに対し、該入力キーを追加するキー追加部を備える。さらに、本情報処理装置は、上記バッファが維持するツリー構造内のノードを走査して、該ツリー構造を表現する簡潔データ構造を構築するとともに、該簡潔データ構造内にキーが存在することを近似的に与えるフィルタを構築する構築部を備える。本情報処理装置は、さらに、上記データストアに対する照会キーの問い合わせに対応して探索を行う際に、簡潔データ構造を探索するのに先だって、対応するフィルタに対し該簡潔データ構造内に照会キーが存在することを確認する照会部を備える。
 上記構成によれば、キーを空間効率高く格納するとともに、オンライン構築が可能で、データ操作性能が改善されたデータストアを実現することができる。特に簡潔データ構造が複数構築された場合でも、上記フィルタにより、簡潔データ構造にキーが含まれるかを近似的に知ることができるため、簡潔データ構造の個数によらず、効率的にキーを照会することが可能となる。
ファサードによるLOUDSを用いたキーバリュー・ストアの実装方法を説明する図。 本実施形態によるキーバリュー・ストアを実現するコンピュータ装置の機能ブロック図。 本実施形態によるコンピュータ装置が実行する、キーバリュー・ストアに対するキー追加処理を示すフローチャート。 本実施形態によるコンピュータ装置が実行する、キーバリュー・ストアに対するキー照会処理を示すフローチャート。 アルファベット取得関数、第1子ノード取得関数および兄弟ノード取得関数を模式的に説明する図。 構築用バッファトライ木から下位LOUDSおよびブルームフィルタを構築する処理を模式的に説明する図。 本実施形態のLOUD構築処理により構築される構築LOUDSおよび構築ブルームフィルタのデータ構造を示す図。 本実施形態によるコンピュータ装置が実行する、LOUDS構築処理を示すフローチャート(1/2)。 本実施形態によるコンピュータ装置が実行する、LOUDS構築処理を示すフローチャート(2/2)。 複数の下位LOUDSから結合されたLOUDSおよびブルームフィルタを構築する処理を説明する図。 本実施形態によるコンピュータ装置が実行する、キーバリュー・ストアにおける結合処理のメインフローを示すフローチャート。 結合ノードについてのアルファベット取得関数、第1子ノード取得関数および兄弟ノード取得関数を模式的に説明する図。 (A)結合にかかる複数のトライ木(T1,T2)を例示する図、および(B)結合ルート(M(r1,r2))を起点とした結合トライ木の幅優先走査を説明する図。 結合トライ木(Tm)が仮想的に辿られる様子を説明する図(1/2)。 結合トライ木(Tm)が仮想的に辿られる様子を説明する図(2/2)。 本実施形態によるコンピュータ装置が実行する、LOUDS結合処理を示すフローチャート。 本実施形態のコンピュータ装置の概略的なハードウェア構成図。 (A)演算時間(sec)をプロットした棒グラフ、および(B)構築されたLOUDSおよびブルームフィルタの各データ構造のサイズを表す積み上げ棒グラフ。 (A)入力サイズ(キー数)に対し演算時間(sec)をプロットした折れ線グラフ、および(B)入力キーの数に対してスループットをプロットした折れ線グラフ。 (A)キーバリュー・ストア中に照会キーが存在する場合と、存在しない場合とに分けてスループットをプロットした棒グラフ、および(B)混合トランザクションのスループットをプロットした棒グラフ。
 以下、本発明について実施形態をもって説明するが、本発明は、後述する実施形態に限定されるものではない。なお、以下に説明する実施形態では、ツリー構造を表現する簡潔データ構造およびフィルタを用いたデータストアを実現する情報処理装置として、トライ木を表現するLOUDS(Level Order Unary Degree Sequence)およびブルームフィルタを用いたキーバリュー・ストア(Key-Value Store)を実現するコンピュータ装置100を一例に説明する。また、本コンピュータ装置100は、LOUDSおよびブルームフィルタを構築するためのデータ構築装置および複数のトライ木が結合された結合LOUDSを構築するためのデータ結合装置を構成する。
 まず、本実施形態によるコンピュータ装置についての詳細な説明を行う前に、LOUDSを用いたキーバリュー・ストアの実装手法について説明する。LOUDSのような追記が困難な静的データ構造を用いてキーバリュー・ストアを実装する手法を検討すると、好適には、ファサードと呼ばれる手法を採用することができる。上述したファサードでは、一定数n(nは自然数)のキーおよび値のセット(以下、入力データ・セットと参照する。)が入力される毎にLOUDSの構築が行われ、これによって生成される複数の下位LOUDSをあたかも単一のデータ構造のように扱う。
 図1は、ファサードによるLOUDSを用いたキーバリュー・ストアの実装方法を説明する図である。図1に示すコンピュータ装置500は、入力される入力データ・セットを受け付けるバッファトライ木510と、複数の下位LOUDS520-1~520-xとを備える。
 バッファトライ木510は、入力データ・セットの新規追加を受け付ける、追記可能なバッファであり、一定数n個まで入力データ・セットが追記される。入力バッファトライ木510に入力されたデータ数が一定数n個に達すると、このバッファトライ木510から下位LOUDS520が構築される。つまり、キーバリュー・ストア全体の入力データ総数N(Nは自然数)に対し、概ねN/n個の下位LOUDS520-1~520-xが構築されることになる。そして、図1に示すように、キー照会要求に応答して、バッファトライ木510および複数の下位LOUDS520各々に問い合わせを発生させて、あたかも全体を表す単一のデータ構造であるかのように扱うことにより、オンライン構築可能なキーバリュー・ストアを実現することができる。
 上記実装手法によれば、入力データ・セットが追加される毎にLOUDSを再構築する必要がなく、下位LOUDS520の構築回数は、入力データ総数Nに対し、N/n回に抑制される。しかしながら、総数N個のデータがN/n個の下位LOUDS520に分割され格納されるため、1回のリード要求に対し、実データ構造である下位LOUDS520へのN/n回のリード要求が発生することになる。したがって、リードの性能は、n/Nに低下してしまう。
 上述したデータ構造が、充分に大きなシステムに組み込まれ、全体負荷に占める下位LOUDS520に対するリード負荷の占める割合が充分に小さければ、上記リードの性能の低下はあまり問題とならないかもしれない。しかしながら、上述したようにLOUDS自体へのリード処理は、ダブルアレイによる実装に比べて10倍近い時間を必要とする可能性がある。つまり、LOUDSによる実装では、ダブルアレイによる実装と比較して、そのリード性能が、n/(10N)にまで低下してしまう可能性がある。これは、例えば下位LOUDS520の個数が10個程度であっても、1/100程度まで性能が低下しうることを意味する。
 上述した下位LOUDS520の個数の増加に起因するリード性能の低下を緩和するため、一定の戦略に従って下位LOUDS520同士を結合(merge)することも考えられる。結合処理により、下位LOUDS520の個数が抑制されるとともに、重複するプレフィックスが共有されるためトライ木のサイズも圧縮されるという利点がある。
 一方、LOUDS520へのアクセス自体が比較的高負荷であるため、結合処理がシステム全体に加える負荷は無視できない。このため、結合実行をできるだけ遅延させる戦略を採用することが望ましい。しかしながら、リード性能がLOUDSの個数に依存して低下してしまうので、結合実行を遅延させればさせるほど、システムのリード性能の低下が著しくなる。
 以上を鑑み、本実施形態では、入力データ総数Nとともに増加する下位LOUDSへのアクセス回数に実質的に依存しない、あるいはアクセス回数の増加による影響が小さなデータ操作が可能なキーバリュー・ストアを実現するために、詳細は後述する最適化されたキーバリュー・ストアの実データ構造を提供する。以下、図2~図6を参照しながら、本実施形態により実現されるキーバリュー・ストアの詳細について説明する。
(1)全体構成
 図2は、本実施形態によるキーバリュー・ストアを実現するコンピュータ装置の機能ブロック図である。図2に示すコンピュータ装置100は、キーバリュー・ストア120を構成する実データ構造として、バッファトライ木122,124と、0または1以上の下位LOUDS132-1~132-xとを含む。さらに、本実施形態では、実データ構造として、複数の下位LOUDS132-1~132-xに対応して、複数のブルームフィルタ134-1~134-xが設けられている。
 バッファトライ木122,124は、データ・セット(キーおよび値のセット)が格納されたトライ木を維持する、追記可能なバッファである。バッファトライ木122,124は、LOUDSが追記困難な静的なトライ木であるのに対し、リンク構造によりツリー構造が維持された追記可能な動的なトライ木として構成される。バッファトライ木122,124は、特に限定されるものではないが、ノードごとに文字配列を持たせる方法、遷移テーブル(Transition Table)、トリプルアレイ(Triple Array)、ダブルアレイ(Double Array)などの既知の手法方法により実装することができる。また、ツリー構造としては、トライ木の他、パトリシア木を挙げることができる。
 上記バッファトライ木122,124のうち、バッファトライ木122は、一定数n個までの入力データ・セットが追加される入力バッファとして機能し、以下、入力バッファトライ木122と参照する。バッファトライ木124は、入力データ数が一定数nに達し、LOUDS構築用として設定された、LOUDS構築処理中であるバッファトライ木を便宜上表したものである。以下、構築用バッファトライ木124と参照する。
 下位LOUDS132は、それぞれ、入力データ総数Nのうちのn個ずつの入力データ・セットが格納されたトライ木を表現する簡潔データ構造である。下位LOUDS132は、入力バッファトライ木122に入力されたデータ数が一定数nに達する毎に構築される。
 下位LOUDS132に対応してそれぞれ設けられるブルームフィルタ134は、対応する下位LOUDS132内に特定のキーが存在することを、近似的ないし確率的に判定するフィルタである。ブルームフィルタ134は、入力バッファトライ木122に入力されたデータ数が一定数nに達する毎に呼び出されるLOUDS構築処理中に、下位LOUDS132とともに構築される。
 ブルームフィルタ134には、k個(1以上の自然数)のハッシュ関数が定義されている。ハッシュ関数は、それぞれ、入力される特定のキーをビット配列中の配列位置にマッピングする。特定のキーをk個のハッシュ関数に入力し、得られたk個のハッシュ値(配列インデックス)に対応するビット群いずれかひとつでも「0」であれば、その特定のキーが下位LOUDS132中に含まれていないことを示す。反対に、得られたk個の配列インデックスに対応するビット群すべてが「1」、すなわち有効化されていれば、その特定のキーが下位LOUDS132中に含まれている可能性(含まれていない場合もある。)があることを示す。ブルームフィルタ134は、いわゆる偽陽性(False Positive)を有し、誤検出が生じ得るが、偽陰性(False Negative)は有しない。
 上述したキーバリュー・ストア120を構成するバッファトライ木122,124、下位LOUDS132-1~132-xおよびブルームフィルタ134-1~134-xは、好適には、高速なデータ操作を可能とするため、コンピュータ装置100が備えるRAM(Random Access Memory)などの1次記憶装置に格納することができる。
 コンピュータ装置100は、さらに、キーバリュー・ストア120を管理する機能部として、バッファ準備部102と、キー追加部104と、LOUDS構築部106と、キー照会部108と、LOUDS結合部110とを備える。バッファ準備部102は、入力バッファトライ木122に入力されたデータ数が一定数n個に達する毎に、新しい入力バッファトライ木を準備するとともに、一定数n個に達した入力バッファトライ木を構築用バッファトライ木124として設定する。
 キー追加部104は、当該コンピュータ装置100内で発生したデータ入力要求、または外部から受信したデータ入力要求に応答して、入力データ・セットを構成するキーおよび値を受け取り、このキーおよび値を入力バッファトライ木122のトライ木に追記する。ここで、キーは、特に限定されないが、文字列であり、値は、ユニークな整数に対応付けられる任意の型のオブジェクトである。以下、説明の便宜上、キーに整数値が対応付けられるものとして説明する。
 LOUDS構築部106は、構築用バッファトライ木124が設定されると、この構築用バッファトライ木124が維持するトライ木内の各ノードを走査して、該トライ木を表現する下位LOUDS142を構築するとともに、対応するブルームフィルタ144を構築する。
 図2において、構築されたLOUDSおよびブルームフィルタは、構築LOUDS142および構築ブルームフィルタ144と参照される。構築処理が完了すると、構築LOUDS142および構築ブルームフィルタ144を含む新規セット140は、検索用LOUDS群130に追加され、一方、構築用バッファトライ木124は、検索対象から除外される。検索対象から除外された構築用バッファトライ木124は、例えば、RAMからHDD(Hard Disk Drive)などの2次記憶装置にダンプされたり、またはRAMから消去されたりする。
 なお、説明する実施形態では、説明の便宜上、データ数が一定数n個に達したことに応答して、新しい入力バッファトライ木122が準備され、下位LOUDS132およびブルームフィルタ134が構築されるものとして説明する。しかしながら、新規の入力バッファトライ木122の準備およびLOUDS構築を開始させる契機となる条件は、特に限定されるものではない。例えば、他の実施形態では、一定時間が経過することを条件としてもよい。また、データ数および時間にしきい値を設けるとしても、一定値に限られず、例えば、しきい値は、キーバリュー・ストア120の用途やデータ・セットの性質(データ入力頻度の平均値や時間帯毎の分布)などを考慮して、適宜設定することができる。
 キー照会部108は、当該コンピュータ装置100内で発生したキー照会要求、または外部から受信したキー照会要求に応答して、キー照会要求に含まれるキー(以下、照会キーという。)を取得し、当該キーバリュー・ストア120の実データ構造群に対し問い合わせを行う。キー照会部108は、また、実データ構造群から照会結果として照会キーに対応する値を取得し、要求元に返却する。
 キー照会部108は、より具体的には、入力バッファトライ木122、構築中のものがあれば構築用バッファトライ木124の順に、照会キーの探索を行う。バッファトライ木122,124中に照会キーが見付からなければ、キー照会部108は、続いて検索用LOUDS群130に対する問い合わせを行う。
 キー照会部108は、検索用LOUDS群130に対する問い合わせにおいては、新しいものから順に、下位LOUDS132-1~132-xの探索を試みる。その際に、下位LOUDS132の探索に先だって、キー照会部108は、対応するブルームフィルタ134に対し、その対応する下位LOUDS132内に照会キーが存在する可能性を確認する。ブルームフィルタ134から肯定的な結果が得られた場合は、対応する下位LOUDS132に問い合わせが行われるが、否定的な結果が得られた場合は、下位LOUDS132自体に対する問い合わせは省略され、次に新しい下位LOUDSへと探索対象が進められる。これにより、キー照会部108は、キーバリュー・ストア120に格納されたキーの値(複数あるのであればその最新の値)を取得し、要求元に返却する。
 LOUDS結合部110は、所与の戦略に従って、複数の下位LOUDS132を結合し、より上位のLOUDSを構築する。なお、LOUDS結合処理については、詳細を後述する。
(2)キー追加処理
 以下、図3を参照して、本実施形態によるキーバリュー・ストア120におけるキー追加処理の詳細について説明する。図3は、本実施形態によるコンピュータ装置が実行する、キーバリュー・ストアに対するキー追加処理を示すフローチャートである。図3に示す処理は、例えばコンピュータ装置100が起動し、キーバリュー・ストア120に対応するサービスが起動されたことに応答して、ステップS100から開始される。
 ステップS101では、キー追加部104は、データ入力要求の受領を待ち受け、データ入力要求を受領するまで(NOの間)、ステップS101をループさせる。ステップS101で、データ入力要求を受領したと判定された場合(YES)は、ステップS102へ処理が進められる。ステップS102では、キー追加部104は、入力データ・セット(キーおよび値)を受け取り、ステップS103では、キー追加部104は、入力データ・セットのキーを入力バッファトライ木122中に追記し、該キーに関連付けて入力データ・セットの値を格納する。
 ステップS104では、キー追加部104は、入力バッファトライ木122に追加された新規データ数が規定数n以上となったか否かを判定する。新規データ数は、新たな入力バッファが準備される毎にリセットされ、入力データ・セットを追加する毎に増分するカウンタを用いて計数することができる。ステップS104で、まだ新規データ数が規定数n未満であると判定された場合(NO)は、ステップS101へループし、次のデータ入力要求を待ち受ける。一方、ステップS104で、新規データ数が規定数n以上になったと判定された場合(YES)は、バッファ準備部102を呼び出し、ステップS105へ処理を進める。
 ステップS105では、バッファ準備部102は、以降の入力データ・セットを受け入れるための新しい入力バッファトライ木122を準備する。ステップS106では、バッファ準備部102は、規定数nに達した古い入力バッファトライ木122を構築用バッファトライ木124として設定する。ステップS107では、バッファ準備部102は、LOUDS構築部106を呼び出し、構築用バッファトライ木124からのLOUDS構築処理を実行させる。なお、ステップS107で呼び出されるLOUDS構築処理については、詳細を後述する。
 ステップS107で呼び出されるLOUDS構築処理が完了すると、ステップS108では、バッファ準備部102は、元の構築用バッファトライ木124を検索対象から除外し、新たに構築された構築LOUDS142および構築ブルームフィルタ144の新規セット140を検索用LOUDS群130に追加する。ステップS108以降は、処理はステップS101へ再びループされる。
 図3に示した処理フローにより、キーバリュー・ストア120に順次入力データ・セットがオンラインで追記されるとともに、新規入力数が規定数nに達する毎に行われるLOUDS構築処理により、動的トライ木から静的でコンパクトなLOUDSに変換される。これにより、キーバリュー・ストア120全体としてのサイズが省容量化される。
(3)キー照会処理
 以下、図4を参照して、本実施形態によるキーバリュー・ストア120におけるキー照会処理の詳細について説明する。図4は、本実施形態によるコンピュータ装置が実行する、キーバリュー・ストアに対するキー照会処理を示すフローチャートである。図4に示す処理は、キー追加処理と同様に、キーバリュー・ストア120に対応するサービスが起動されたことに応答して、ステップS200から開始される。ステップS201では、キー照会部108は、データ照会要求の受領を待ち受け、データ照会要求を受領するまで(NOの間)、ステップS201をループさせる。ステップS201で、データ照会要求を受領したと判定された場合(YES)は、ステップS202へ処理が進められる。
 ステップS202では、キー照会部108は、入力バッファトライ木122に対し、照会キーを問い合わせる。ステップS203では、キー照会部108は、入力バッファトライ木122で照会キーが発見されたか否かを判定する。ステップS203で、肯定的な結果が得られ、入力バッファトライ木122内に照会キーで見付かったと判定された場合(YES)は、ステップS213へ処理を進める。ステップS213では、キー照会部108は、入力バッファトライ木122から照会キーに対応する値を読み出し、キー照会要求に対する応答として、要求元に返却する。
 ステップS203で、否定的な結果が得られ、入力バッファトライ木122内で照会キーが見付からなかったと判定された場合(NO)は、ステップS204へ処理が進められる。ステップS204では、キー照会部108は、構築用バッファトライ木124に対し照会キーを問い合わせる。ステップS205では、キー照会部108は、構築用バッファトライ木124内で照会キーが発見されたか否かを判定する。ステップS205で、肯定的な結果が得られ、構築用バッファトライ木124内で照会キーが見付かったと判定された場合(YES)は、ステップS213へ処理が進められる。この場合、ステップS213では、キー照会部108は、構築用バッファトライ木124から照会キーに対応する値を読み出し、キー照会要求に対する応答として、照会キーに対応する値を返却する。
 一方、ステップS205で、否定的な結果が得られ、構築用バッファトライ木124内で照会キーが見付からなかったと判定された場合(NO)は、ステップS206へ処理を進める。なお、構築用バッファトライ木124が存在しなかった場合は、否定的な結果が得られるものとする。
 ステップS206~ステップS211のループでは、検索用LOUDS群130を構成する各下位LOUDS132について、若いものから順に探索が行われる。ステップS207では、キー照会部108は、上記ループにおいて処理対象となる下位LOUDS132自体への問い合わせることに先立って、該下位LOUDS132のブルームフィルタ134に対し、照会キーの存在確認を依頼する。
 ステップS208では、キー照会部108は、ブルームフィルタ134から返却される結果から、上記下位LOUDS132中に照会キーが含まれる可能性があるか否かを判定する。ステップS208で、ブルームフィルタ134から否定的な結果が返され、上記下位LOUDS132内に照会キーが含まれる可能性が無いと判定された場合(NO)は、ステップS211で示すループ終端へ処理を分岐させる。一方、ステップS208で、ブルームフィルタ134から肯定的な結果が返され、上記下位LOUDS132内に照会キーが含まれる可能性が有ると判定された場合(YES)は、ステップS209へ処理を分岐させる。
 ステップS209では、キー照会部108は、上記下位LOUDS132自体に対し問い合わせを行う。ステップS210では、キー照会部108は、上記下位LOUDS132内で照会キーが発見されたか否かを判定する。ステップS210で、肯定的な結果が得られ、上記下位LOUDS132内で照会キーが見付かったと判定された場合(YES)は、ステップS213へ処理が進められる。この場合は、ステップS213では、キー照会部108は、上記ループにおいて処理対象となっている下位LOUDS132から照会キーに対応する値を読み出し、キー照会要求に対する応答として、照会キーに対応する値を返却する。
 一方、ステップS210で、否定的な結果が得られ、当該下位LOUDS132で照会キーが見付からなかったと判定された場合(NO)は、ステップS211で示すループ終端へ分岐させて、次に若い下位LOUDS132へと探索処理を進める。ステップS206~ステップS211のループを繰り返しても、検索用LOUDS群130内の下位LOUDS132-1~132-xいずれからも照会キーが見付からなければ、ステップS206~ステップS211のループを抜けて、ステップS212へ処理が進められる。ステップS212では、キー照会部108は、照会キー無しの応答を要求元に返却する。
 図4に示した処理フローにより、キーバリュー・ストア120からキーに対応する値を効率良く取得し、要求元に返却することができる。特に、下位LOUDS132に対する問い合わせに先立って、ブルームフィルタ134により照会キーが確率的に存在することを確認した上で、存在する可能性がある下位LOUDS132にのみ問い合わせが行われることになる。このため、下位LOUDS132自体へのアクセス回数を低減することが可能となり、全体のリード性能は、データ総数Nとともに増加する下位LOUDS132の個数に実質的に影響されない。
 なお、上述した説明では、キー追加処理において、説明の便宜上、入力データ・セットの存在確認を省略して、新規に入力データ・セットが追加されるものとして説明した。しかしながら、他の実施形態では、入力データ・セットの新規追加処理を行う前に、キー照会処理を実施し、入力データ・セットがキーバリュー・ストア120中に存在しないことを確認した上で新規追加のデータ操作を行う混合トランザクションとしてもよい。この実施形態では、入力データ・セットがキーバリュー・ストア120中に存在することが確認された場合は、上書き更新としてデータ操作を行うこともできる。一方、キーバリュー・ストア120中に存在するか否かに関わらず、入力データ・セットを追加して行くとしても、図4に示すように新しいものから順に実データ構造への問い合わせが行われるため、最新の値が取得されることになる。
(4)LOUDS構築処理
 以下、図5~図9を参照しながら、LOUDS構築処理の詳細について説明する。上述したように、LOUDS構築部106は、構築用バッファトライ木124のトライ木内の各ノードを走査して、該トライ木を表現する構築LOUDS142を構築するとともに、対応する構築ブルームフィルタ144を構築する。LOUDS構築部106は、より具体的には、上記トライ木内の各ノードを幅優先走査しながら、トライ木の各ノードの骨格部分を表すビット列、トライ木の各ノードへ張られるエッジを記述する記号列、トライ木の各ノードがキー末尾に対応するかを示すビット列、およびトライ木の各キーに対応する値の配列を生成する。LOUDS構築部106は、さらに、上記幅優先走査しながら、トライ木の各ノードに対し計算されたk個のハッシュ値をそれぞれ、その子ノードのハッシュ計算の中間値として引き継ぎつつ、キー末尾に対応するノードに対し計算されたk個のハッシュ値を有効化する。
 LOUDS構築部106では、上記幅優先走査を実現するために、以下に示す関数群が定義される。第1の関数は、所与のノード(node)について、該ノードへ張られたエッジが記述する記号を与えるアルファベット取得関数(alphabet(node))である。第2の関数は、所与のノード(node)について、その第1子ノードを与える第1子ノード取得関数(firstChild(node))である。ここで、第1子ノードとは、当該ノードの子ノードのうち、最もアルファベットが小さな子ノードに対応する。なお、説明する実施形態では、アルファベットの大小関係は、アルファベット順序に大きくなるものとして定義されている。第1子ノード取得関数は、第1子ノードが存在しない場合は、null値を返却する(firstChild(node)=null)。
 第3の関数は、所与のノード(node)について、同一のノードを親とする次の兄弟ノードを与える兄弟ノード取得関数(Sibling(node))である。ここで与えられる兄弟ノードは、上記アルファベットの大小関係の定義によれば、当該ノードと同一のノードを親とする兄弟ノードのうち、当該ノードの次に小さいアルファベットのエッジが張られた、当該ノードの直ぐ右に位置する兄弟ノードが対応する。兄弟ノード取得関数は、次の兄弟ノードが存在しない場合は、null値を返却する(Sibling(node)=null)。
 図5は、上記アルファベット取得関数(alphabet(node))、第1子ノード取得関数(firstChild(node))および兄弟ノード取得関数(Sibling(node))を模式的に説明する図である。ノードS0の第1子ノード取得関数(firstChild(S0))は、アルファベット「a」、「b」および「c」のうち最も小さなアルファベット「a」のエッジが張られたノードS1を返却する。ノードS1のアルファベット取得関数(alphabet(S1))は、アルファベット「a」を返却する。ノードS1の兄弟ノード取得関数(Sibling(S1))は、「a」の次に大きなアルファベット「b」のエッジが張られたノードS2を返却する。同様にノードS2の兄弟ノード取得関数(Sibling(S2))は、「b」の次に大きなアルファベット「c」のエッジが張られたノードS3を返却する。
 上述したアルファベット取得関数、第1子ノード取得関数および兄弟ノード取得関数を用いて、ルートを起点とし、ルートの第1子ノードから、その兄弟ノードへと幅方向に走査が行われる。次に、ルートの第1子ノードの第1子ノードおよびその兄弟ノード、ルートの第2子ノードの第1子ノードおよびその兄弟ノードへというように、レベル毎に幅方向の走査が行われる。
 図6は、構築用バッファトライ木124から構築LOUDS142および構築ブルームフィルタ144を構築する処理を模式的に説明する図である。まず、説明する実施形態では、構築LOUDS142を構成する変数群として、BASE、EDGE、LEAFおよびVALの変数群が定義される。BASEは、トライ木の骨格部分を表すビット列(BitBuffer)である。EDGEは、トライ木の各ノードへ張られるエッジを記述する記号列(CharBuffer)である。LEAFは、トライ木の各ノードがキー末尾に対応するかを示すビット列(BitBuffer)であり、VALは、トライ木に格納されたキーに対応する整数を格納する配列(IntBuffer)である。
 図6を参照しながら、BASE変数に関し、例示に沿ってLOUDS構築処理を説明すると、まず、ルートのさらに上位ノードとして最上位ルート(Super Root:番人とも呼ばれる。)が設定され、最上位ルートに対応してビット列「10」がBASEに追記される。続いて、ルートrに対応して、このルートrの子ノード数分の「1」と、それに続く「0」を含むビット列「110」がBASEに追記される。
 図6の例示によれば、幅優先走査により、ルートrに続いてノードS1,S2が順に訪問される。ルートrの第1子ノードS1に対応して、その子ノード数分の「1」とそれに続く「0」を含むビット列「110」がBASEに追記される。さらにルートrの第2子ノードノードS2に対応して、その子ノード数分の「1」と、それに続く「0」を含むビット列「10」がBASEに追記される。最後に、ノードS1,S2の各子ノードS3~S5に対応して、各ビット「0」がBASEに追記される。このようにして、幅優先走査により、BASEのビット列が構築される。
 以下、図6を参照しながら、LEAF変数、EDGE変数およびVAL変数に関し、LOUDS構築処理を説明する。上述したように幅優先走査によりルートr、ノードS1,S2,S3,S4,S5の順に各ノードが訪問される。訪問順に、まず、ルートrに対応して、ルートrがキー末尾でないことを示すビット「0」がLEAFに追記される。続いてノードS1に対応して、ノードS1へ張られたエッジが記述する記号「a」およびノードS1がキー末尾に対応しないことを示すビット「0」が、EDGEおよびLEAFにそれぞれ追記される。続いて、ノードS2に対応して、記号「b」およびビット「0」がEDGEおよびLEAFにそれぞれ追記される。
 同様に、ノードS3に対応して、エッジ「b」およびノードS3がキー末尾に対応することを示すビット「1」がEDGEおよびLEAFにそれぞれ追記される。ここでは、ノードS3のビット「1」の追記とともに、ルートrから当該ノードS3までのノードが表すキー(文字列ab)に対応付けて整数値「10」をVALに格納する。ノードS1の子ノードS4、ノードS2の子ノードS5についても同様である。このようにして、幅優先走査により、上記BASEとともに、LEAFのビット列、EDGEの記号列およびVALの整数の配列が構築される。
 図6を参照しながら、さらに、ブルームフィルタに関し、LOUDS構築処理を説明する。ブルームフィルタは、ハッシュ値に対応して有効「1」または無効「0」の値を保持するビット配列として構成される。また、ブルームフィルタには、PUT関数が定義されており、PUT関数が呼び出されると、与えられたハッシュ値に対応するビット配列中の値が有効化される。ブルームフィルタのビット配列は、初期状態ではすべての値が「0」となっており、キーの末尾に対応するノードについてPUT関数が呼び出されて、k個のハッシュ値に対応するビットが「1」に書き換えられる。
 図6を参照すると、まず、ルートに対するハッシュ初期値が設定される(root.h=0)。続いて、ルートrを訪れた際に、ルートrのハッシュ初期値(root.h)からk個のハッシュ値が計算され(h=f(root.h))、計算されたk個のハッシュ値が中間ハッシュ値としてその各子ノードに引き継がれる(node(S1).h = node(S2).h = h)。ノードS1を訪れた際には、ノードS1のk個のハッシュ中間値(node(S1).h)からノードS1のk個のハッシュ値がそれぞれ計算され(h=f(node(S1).h))、計算されたk個のハッシュ値が当該ノードS1の各子ノードに引き継がれる(node(S3).h = node(S4).h = h)。
 ノードS3を訪れた際には、ノードS3のハッシュ中間値(node(S3).h)からハッシュ値が計算され、キー末尾であることに対応してPUT関数が呼び出され、計算されたk個のハッシュ値(h(S3) = f(node(S3).h))に対応するブルームフィルタのビット配列中のビットが有効化される。このようにして、幅優先走査により、ブルームフィルタのビット配列が構築される。
 図7は、本実施形態のLOUD構築処理により構築される構築LOUDS142および構築ブルームフィルタ144のデータ構造を例示する。図7(A)に示すように、構築LOUDS142は、ビット列BASE、記号列EDGE、ビット列LEAFおよびキー値配列VALとして構成される。
 また構築ブルームフィルタ144は、図7(B)に示すように、k個のハッシュ関数から計算されるk個のハッシュ値に対応して、有効「1」または無効「0」を保持する、ビット配列として構成される。構築処理が完了した構築ブルームフィルタ144においては、ビット配列は、PUT関数によってキー末尾に対応するノードのハッシュ値に対応するビットが「1」に書き換えられている一方で、それ以外のハッシュ値に対応するビットは「0」を保持したままの状態となっている。
 以下、図8および図9に示すフローチャートを参照して、本実施形態によるLOUDS構築処理について詳細を説明する。図8および図9は、本実施形態によるコンピュータ装置が実行する、LOUDS構築処理を示すフローチャートである。図8および図9に示す処理は、図3に示したステップS107で呼び出され、ステップS300から開始される。
 ステップS301では、LOUDS構築部106は、まず幅優先走査のための空のキューと、上述した空のBASE、空のEDGE、空のLEAF、空のVALおよび0クリアされたブルームフィルタのビット配列を作成する。LOUDS構築部106は、ステップS302で、ルートに対するハッシュ初期値を0に設定し、ステップS303で、最上位ルート(super root)に対応してBASEに「10」を追記し、ステップS304で、幅優先走査を開始するべく、トライ木のルートrをキューに追加する。
 ステップS305では、LOUDS構築部106は、キューが空であるか否かを判定する。ステップS305で、キューが空ではないと判定された場合(NO)は、ステップS306へ処理が分岐される。ステップS306では、LOUDS構築部106は、キューの先頭からノードを取り出し、該ノードを訪れる。なお、最初のステップS306では、ステップS304で追加されたルートが取り出されることになり、以降のステップS306では、後述するステップS310で追加されたノードが取り出されることになる。
 ステップS307では、LOUDS構築部106は、当該ノードのハッシュ中間値(ノードがルートであればハッシュ初期値が対応する。)から当該ノードのハッシュ値を計算する。ここで、ハッシュ関数について具体例をもって説明すると、文字列(s[0,…,s.length])に対するハッシュ値(h)が下記疑似コードで定義される場合、下記式(1)を用いてハッシュ中間値(node.h)からハッシュ値(h)を計算することができる。
Figure JPOXMLDOC01-appb-M000001

Figure JPOXMLDOC01-appb-M000002

 上記疑似コードおよび上記式(1)中、文字列(s)は、連続する数値で表現され、変数(s.length)は、文字列(s)の末尾の位置を表し、要素(s[i])は、文字列(s)中の位置iにおける記号を表す数値である。定数(P)は、使用される記号の種類の数に近い素数であり、記号がASCII文字で表される場合は、例えば「131」の値を用いることができる。
 なお、上記疑似コードおよび上記式(1)は、例示であって、各キーに対するハッシュ値が、プレフィックスを共通するキー同士で共通する中間値を用いるような、如何なるハッシュ関数に対し適用することができる。k個のハッシュ関数は、例えば、上記式(1)でそれぞれ異なる定数(P)を用いて用意してもよいし、上記式(1)で異なる初期値を用いて用意してもよい。あるいは、他の実施形態では、充分に幅広なハッシュ値を生成して、それを所定の位置で分割してk個のハッシュ関数を用意してもよい。
 ステップS308では、LOUDS構築部106は、上記第1子ノード取得関数を用いて当該ノードの第1子ノードの取得を試みる。ステップS309では、ノードが有るか否かによって処理が分岐される。ステップS309で、ノードが有ると判定された場合(YES)は、ステップS310へ処理が分岐される。ステップS310では、LOUDS構築部106は、当該ノードの子ノードをキューに追加する。ステップS311では、LOUDS構築部106は、上記ステップS307で計算されたハッシュ値(h)を、当該ノードの各子ノードのハッシュ中間値(child.h)として設定し、計算途中の中間値を引き継ぐ。ステップS312では、LOUDS構築部106は、上記兄弟ノード取得関数を用いて、当該ノードの次の兄弟ノードの取得を試み、ステップS309へ処理を進める。
 一方、ステップS309で、子ノードが存在しない(firstChild(node)=null)か、または最終ノードへ達した(Sibling(node)=null)ことにより、ノード(当該ノードの第1子ノードまたは子ノードの兄弟ノード)がこれ以上存在しないと判定された場合(NO)は、存在する子ノードすべてがキューに追加されたことになるので、ポイントAを介して、図9に示したステップS313へ処理が進められる。
 ステップS313では、LOUDS構築部106は、BASEに対し、当該ノードの子ノードと同じ個数の「1」と、それに続く「0」とを追記する。ステップS314では、LOUDS構築部106は、アルファベット取得関数を用いて、当該ノードへ張られるエッジが記述する文字を取得し、EDGEに対し、当該ノードのアルファベットを追記する。
 ステップS315では、LOUDS構築部106は、訪れている当該ノードが、キーの末尾に対応する「リーフ」であるか否かを判定する。なお、説明する実施形態では、キーの末尾に、末尾にしか現れない特殊な文字を追加する実装を採用するものとする。この場合、必ずキー毎にリーフが作成されるため、最底辺のノードを「リーフ」と判定することができる。末尾にしか現れない特殊な文字が用いられず、終端フラグが導入されて中間ノードに対してもキーの値が格納される実施形態は、最底辺のノードと終端フラグが立っている中間ノードとが「リーフ」と判定される。
 ステップS315で、「リーフ」ではないと判定された場合(NO)は、ステップS316へ処理が分岐される。ステップS316では、LOUDS構築部106は、LEAFに対し、「0」を追記し、ポイントBを介して図8に示すステップS305へループさせる。一方、ステップS315で、「リーフ」であると判定された場合(YES)は、ステップS317へ処理が分岐される。
 LOUDS構築部106は、ステップS317で、LEAFに対し、「1」を追記し、ステップS318で、VALに対し、当該ノードが末尾を表しているキーに対応する値を追記する。ステップS319では、LOUDS構築部106は、ブルームフィルタのPUT関数を呼び出し、当該ノードについて算出されたk個のハッシュ値に対応するビット配列の値を有効化して登録し、ポイントBを介して図8に示すステップS305へループさせる。なお、LEAF中にルートに関するビットを含めることにより、長さ0の文字列が1つだけ含まれるトライ木も正しく扱われるようになる。
 再びステップS305を参照すると、ステップS305で、キューが空であり、トライ木の幅優先走査の終端に達したと判定された場合(YES)は、ステップS320へ処理が分岐される。ステップS320では、LOUDS構築部106は、生成されたBASEに対し、2つのインデックス(BASE_RANK,BASE_SELECT)を作成する。
 BASE_RANKは、ランク・ビット・ディレクトリ(Rank Bit Directory)として参照され、BASEビット配列中の0から与えられたi番目までの「0」(または「1」)の個数を定数時間で回答することができるインデックスである。例えば、BASE_RANK(s,i)は、s[0,...,i]中の「0」の個数を回答し、BASE_RANK(s,i)は、s[0,...,i]中の「1」の個数を回答する。
 これに対して、BASE_SELECTは、セレクト・ビット・ディレクトリ(Select Bit Directory)として参照され、与えられたBASEビット配列中の(i+1)番目の「0」(または「1」)の位置を定数時間で回答するインデックスである。例えば、BASE_SELECT(s,i)は、(i+1)番目の「0」の位置を回答し、BASE_SELECT(s,i)は、(i+1)番目の「1」の位置を回答する。
 上記2つのインデックス(BASE_RANK,BASE_SELECT)により、BASEに対する2種類の操作が定義され、これにより、特定ノードの第1子ノード、兄弟ノード、親ノード、最終子ノードなどを取得することができるようになる。すなわち、LOUDSのデータ構造に対しても、上述した第1子ノード取得関数および兄弟ノード取得関数が提供される。インデックス(BASE_RANK,BASE_SELECT)は、lをBASEの長さとすると、o(l)ビットの余剰メモリ空間を使用して構築することができる。なお、BASE_RANKおよびBASE_SELECTの詳細については、非特許文献4を参照されたい。
 ステップS321では、LOUDS構築部106は、上述したステップS320でBASEについて説明したものと同様の手法により、LEAFに対してもインデックス(LEAF_RANK)を作成し、ステップS322で本LOUDS構築処理を終了する。
 図5~図9を参照して上述した処理により、構築用バッファトライ木124から構築LOUDS142および構築ブルームフィルタ144の新規セット140が構築される。上記構築処理においては、構築LOUDS142および構築ブルームフィルタ144の両方が、1回の幅優先走査によって構築されるため、構築LOUDS142および構築ブルームフィルタ144を別々に構築した場合と比較しても、構築にかかる演算コストが低減される。
 さらに、構築LOUDS142は、本質的にメモリ利用効率が高い簡潔データ構造であり、構築ブルームフィルタ144も、構築LOUDS142に比べて小さく、キー数に応じたメモリ使用量で構築される。このため、キーバリュー・ストア120全体としても、にキーを空間効率高く格納することが可能となる。
(5)LOUDS結合処理
 以下、図10~図16と再度図9とを参照して、図2に示したLOUDS結合部110によるLOUDS結合処理について説明する。図10は、LOUDS結合処理を説明する図である。上述したように、LOUDS結合部110は、一定の戦略に従って複数の下位LOUDSを結合し、より上位のLOUDSを構築する。
 LOUDS結合部110は、より具体的には、複数の下位LOUDSが表現するトライ木それぞれのルートを結合した結合ルートを起点として幅優先走査することにより、結合トライ木を表現する結合LOUDSおよび対応する結合ブルームフィルタを構築する。ここで、結合トライ木とは、上記複数の下位LOUDSが表現する複数のトライ木が結合(merge)され構成されたものである。結合により、下位LOUDSの個数が抑制されるとともに、重複するプレフィックスが共有されるため、データのサイズも圧縮される。
 上述した結合の戦略は、結合処理を呼び出す契機とする条件(以下、結合条件という。)として、管理者等により事前に記述される。結合条件は、特に限定されるものではないが、図10に示すように、合計2個の同一レベルの下位LOUDSが検索用LOUDS群130に設定されたことに応答して、2個のLOUDS150-1,150-2を結合対象として結合処理を呼び出すという条件を採用することができる。なお、図10中、入力バッファトライ木122から直接構築された下位LOUDSをLevel1LOUDSと参照し、Level1LOUDSが2個結合されたものをLevel2LOUDSと参照する。
 図10の例示では、2個のLevel1LOUDS150-1,150-2を結合して結合LOUDS162および対応する結合ブルームフィルタ164のセット160が生成される。結合処理が完了すると、結合LOUDS162および結合ブルームフィルタ164を含むセット160が、Level2LOUDSとして検索用LOUDS群130に追加され、一方で、従前の2個のLevel1LOUDS150-1,150-2は、検索用LOUDS群130から除外される。除外されたLevel1LOUDS150-1,150-2は、例えばRAMからHDDなどの2次記憶装置にダンプされたり、あるいはRAMから消去されたりすることになる。
 図11は、本実施形態によるコンピュータ装置が実行する、キーバリュー・ストアにおける結合処理のメインフローを示すフローチャートである。図11に示す処理は、例えばキーバリュー・ストア120に対応するサービスが起動されたことに応答して、ステップS400から開始される。
 ステップS401では、LOUDS結合部110は、事前設定された結合条件の成立を待ち受け、結合条件が成立するまで(NOの間)、ステップS401をループさせる。ステップS401で、結合条件が成立したと判定された場合(YES)は、ステップS402へ処理が進められる。ここでは、合計2個の下位LOUDS150が検索用LOUDS群130に設定されたことに応答して結合処理が呼び出されるものとする。
 ステップS402では、LOUDS結合部110は、成立した結合条件にかかる2個の下位LOUDS150を結合対象に設定する。ステップS403では、LOUDS結合部110は、結合対象として設定された2個の下位LOUDS150を結合するLOUDS結合処理を実行する。なお、ステップS403で呼び出されるLOUDS結合処理については、詳細を後述する。
 ステップS403で呼び出されたLOUDS結合処理が完了すると、ステップS404では、LOUDS結合部110は、新たに構築された結合LOUDS162および結合ブルームフィルタ164のセット160を検索用LOUDS群130に追加する。ステップS405では、LOUDS結合部110は、2つの結合済みの下位LOUDS150とブルームフィルタ152とのセットを検索用LOUDS群130から除外する。以降は、ステップS401へ再び処理がループされる。
 なお、結合条件に関連して、他の実施形態では、結合処理をできるだけ遅延する戦略をとるべく、合計M(Mは2以上の自然数である。)個のLOUDSが検索用LOUDS群130に設定されることに応答して、2個ずつLOUDSを結合対象として結合処理を(M-1)回呼び出すことができる。この場合、合計M個のLOUDSを結合した結合LOUDSおよび対応する結合ブルームフィルタが構築されることになる。あるいは、詳細を後述する結合処理を拡張して、3以上のLOUDSを一括結合して、結合LOUDSおよび対応する結合ブルームフィルタを構築することも妨げられない。
 以下、図12~図16および図9を参照しながら、上述したLOUDS結合部110によるLOUDS結合処理の詳細について説明する。LOUDS結合部110は、より具体的には、結合対象の2個のLOUDS150の各トライ木内の各ノードを幅優先走査しながら、上記結合トライ木の各ノードの骨格部分を表すビット列、結合トライ木の各ノードへ張られるエッジを記述する記号列、結合トライ木の各ノードがキー末尾に対応するかを示すビット列、および結合トライ木の各キーに対応する値の配列を生成する。LOUDS結合部110は、さらに、上記幅優先走査しながら、結合トライ木の各ノードに対し計算されたk個のハッシュ値をそれぞれ、その子ノードのハッシュ計算の中間値として引き継ぎつつ、キー末尾に対応するノードに対し計算されたk個のハッシュ値を有効化する。
 LOUDS結合部110では、結合トライ木の仮想的な幅優先走査を実現するために、成立した結合条件に関連する2個のトライ木(T1,T2)の各ノード(node1,node2)ついてのアルファベット取得関数(alphabet(node1), alphabet(node2))、第1子ノード取得関数(firstChild (node1), firstChild (node2))および兄弟ノード取得関数(Sibling (node1), Sibling (node2))に加えて、以下に示す関数群が定義される。ここで、結合にかかるトライ木(T1,T2)から得られる2個のノード(node1,node2)を結合した、結合ノード(M(node1,node2))を導入する。
 第1の関数は、所与の結合ノード(M(node1,node2))について、該結合ノードへのエッジが記述する記号を与えるアルファベット取得関数(alphabet(M(node1,node2)))である。アルファベット取得関数(alphabet(M(node1,node2)))は、下記式(2)を用いて計算される。下記式(2)によれば、結合にかかるトライ木(T1,T2)のノード(node1,node2)のうち最も小さなアルファベットが返却される。
Figure JPOXMLDOC01-appb-M000003

 第2の関数は、所与の結合ノード(M(node1,node2))について、該結合ノードの第1子ノードを与える第1子ノード取得関数(firstChild(M(node1,node2)))である。ここでの第1子ノードは、結合トライ木(Tm)における当該結合ノードの第1子ノードである。第1子ノード取得関数(firstChild(M(node1,node2)))は、下記式(3)によりトライ木について定義された第1子ノード取得関数(firstChild(node))を用いて計算される。
Figure JPOXMLDOC01-appb-M000004

 結合ノードについての第1子ノード取得関数は、通常のノードと同様に、第1子ノードが存在しない場合は、null値を返却し(firstChild(M)=null)、その場合のアルファベット取得関数は、任意のアルファベットαより大きな値(alphabet(null)>α)を返却する。上記式(3)によれば、共通のプレフィックスを表すノード(alphabet(node1)=alphabet(node2))については、両方のトライ木のカーソル位置が進められ、新たな結合ノード(M(firstChild(node1), firstChild(node2)))が返却される。この新たな結合ノードは、結合前の各ノードの子ノードを再帰的に結合したものである。ノードのアルファベットが異なる場合(alphabet(node1)<>alphabet(node2))は、結合にかかるトライ木(T1,T2)のノード(node1,node2)のうち小さな方のトライ木のカーソル位置が進められ、該小さな方のノードにぶら下がる第1子ノードが返却される。
 第3の関数は、所与の結合ノード(M(node1,node2))について、該結合ノードと同一のノードを親とする次の兄弟ノードを与える兄弟ノード取得関数(Sibling(M(node1,node2)))である。兄弟ノード取得関数(Sibling (M(node1,node2)))は、下記式(4)を用いて計算される。
Figure JPOXMLDOC01-appb-M000005

 結合ノードについての兄弟ノード取得関数は、通常のノードと同様に、次の兄弟ノードが存在しない場合は、null値を返却し(Sibling(M)=null)、その場合のアルファベット取得関数は、任意のアルファベットαより大きな値(alphabet(null)>α)を返却する。上記式(4)によれば、共通のプレフィックスを表すノード(alphabet(node1)=alphabet(node2))については、両方のトライ木のカーソル位置が進められ、新たな結合ノード(M(Sibling(node1), Sibling(node2)))が返却される。ノードのアルファベットが異なる場合(alphabet(node1)<>alphabet(node2))は、結合にかかる2個のトライ木のノード(node1,node2)のうち大きな方のトライ木のカーソル位置をそのまま維持したまま、小さな方のトライ木のカーソル位置が進められ、小さな方のノードの兄弟ノード(Sibling(node))および大きな方のノード(node)の結合ノードが返却される。
 上記結合ノードについてのアルファベット取得関数、第1子ノード取得関数および兄弟ノード取得関数を各トライ木(T1,T2)のノード(node1,node2)におけるアルファベットの大小関係にて整理すると図12のように模式的に説明することができる。なお、図12中、特定のアルファベット「a」を有するトライ木(T1,T2)のノード(node1,node2)がそれぞれノードa1,a2のように表されている点に留意されたい。
 図12(A)は、トライ木T1およびT2のノードが共通のアルファベット、ひいては共通のプレフィックスを表している場合(alphabet(a1) = alphabet(a2))のアルファベット取得関数(alphabet(M(a1,a2)))、第1子ノード取得関数(firstChild(M(a1,a2)))および兄弟ノード取得関数(Sibling(M(a1,a2)))を模式的に説明する。図12(A)に示すように、ノード(node1)およびノード(node2)が共通のプレフィックスを表す場合は、第1子ノード取得関数(firstChild(M(a1,a2)))および兄弟ノード取得関数(Sibling(M(a1,a2)))に応答して、それぞれ新たな結合ノード(M(firstChild(a1),firstChild(a2)))および結合ノード(M(Sibling(a1), Sibling(a2)))が返却される。
 図12(B)は、トライ木T1のノードのアルファベットが、トライ木T2のノードのアルファベットより小さい場合(alphabet(b1) < alphabet(c2))のアルファベット取得関数(alphabet(M(b1,c2)))、第1子ノード取得関数(firstChild(M(b1,c2)))、兄弟ノード取得関数(Sibling(M(b1,c2)))を模式的に説明する。図12(C)は、トライ木T1のノードのアルファベットが、トライ木T2のノードのアルファベットより大きい場合(alphabet(d1)>alphabet(c2))のアルファベット取得関数(alphabet(M(d1,c2)))、第1子ノード取得関数(firstChild(M(d1,c2)))、兄弟ノード取得関数(Sibling(M(d1,c2)))を模式的に説明する。
 図12(B)および(C)に示すように、ノード間でアルファベットが異なる場合は、兄弟ノード取得関数については、新たな結合ノード(M(Sibling(b1),c2))または結合ノード(M(d1,Sibling(c2)))が返却されるが、第1子ノード取得関数については、アルファベットが小さい方のトライ木における第1子ノードfirstChild(b1)または第1子ノードfirstChild(c2)))が返却される。
 LOUDS結合部110は、上記関数群を用いて、図14(A)に示すように複数のトライ木(T1,T2)のルート(r1,r2)を結合した結合ルート(M(r1,r2))を起点として、結合にかかる複数のトライ木(T1,T2)の各ノードを、図14(B)に示す想定される結合トライ木について幅優先走査となるように訪問する。これにより、LOUDS結合部110は、結合トライ木(Tm)を表現する結合LOUDS162および結合ブルームフィルタ164のセット160を構築する。
 以下、図13および図9に示すフローチャートを参照して、本実施形態によるLOUDS結合処理について詳細を説明する。図13は、本実施形態によるコンピュータ装置が実行する、LOUDS結合処理を示すフローチャートである。なお、図13におけるポイントAおよびポイントB間の処理は、図9に示したLOUDS構築処理のフロート同一であるため、同じ図を参照する。図13および図9に示す処理は、図11に示したステップS403で呼び出されて、ステップS500から開始される。
 ステップS501では、LOUDS結合部110は、まず幅優先走査のための空のキューと、上述した結合LOUDS用の空のBASE、空のEDGE、空のLEAF、空のVALおよび0クリアされた結合ブルームフィルタ用のビット配列を作成する。LOUDS結合部110は、ステップS502で、ルートに対するハッシュ初期値を0に設定し、ステップS503で、最上位ルート(super root)に対応してBASEに「10」を追記し、ステップS504で、幅優先走査を開始するべく、結合にかかる2個のトライ木(T1,T2)の結合ルート(M(r1,r2))をキューに追加する。
 なお、ステップS505以降の処理は、実行主体がLOUDS構築部106に代わってLOUDS結合部110となることを除いて、概ね図8および図9に示したステップS305~S322と同様の処理が行われる。ステップS318に対応するステップでは、2つのトライ木(T1,T2)間でキーが重複した場合は、新しい方の下位LOUDS150に対応する値を優先すればよい。それ以外の処理は、概ね同様であるため、詳細な説明は割愛する。
 図15および図16は、図13および図9に示す処理により、図14(A)に例示した2個のトライ木(T1,T2)をそれぞれ辿ることにより結合トライ木(Tm)が仮想的に辿られる様子を説明する図である。図15(A)は、結合ルート(M(r1,r2))が訪問された際に、結合ルート(M(r1,r2))直下の子ノードが列挙されている様子を示す図である。結合ルート(M(r1,r2))に対する第1子ノード取得関数が呼び出されると、図12(A)に示した演算により、第1子ノードとして結合ノード(M(a1,a2))が取得される。
 続いて、結合ノード(M(a1,a2))に関連して、兄弟ノード取得関数が順次呼び出され、カーソル位置が進められ、結合ノード(M(a1,a2))の兄弟ノードとして、結合ノード(M(b1,f2))および結合ノード(M(null,f2))が順に取得される。ここで、ノードb1およびノードf2は、第1のトライ木(T1)におけるノードa1の兄弟ノードb1、および第2のトライ木(T2)におけるノードa2の兄弟ノードf2である。
 図15(A)を参照して説明した処理により、結合トライ木(Tm)における結合ルート(M(r1,r2))直下の子ノードがすべて列挙され、キューに投入されることになる。そして、幅優先走査により、結合ノード(M(a1,a2))、結合ノード(M(b1,f2))および結合ノード(M(null,f2)が順次走査されると、アルファベット取得関数により、順次、「a」、「b」、「f」が小さい順に列挙される。同時に、結合ノード(M(a1,a2))、結合ノード(M(b1,f2))および結合ノード(M(null,f2))の各結合ノードの子ノードが、第1子ノード取得関数および兄弟ノード取得関数により順次取得され、順次キューに投入されることになる。
 なお、後述するように結合ノード(M(a1,a2))の走査が先に行われるが、結合ノード(M(b1,f2))および結合ノード(M(null,f2))が走査された際には、それぞれ、第1子ノード取得関数により、第1のトライ木(T1)のノードb1にぶら下がる子ノードe1および第2のトライ木(T2)のノードf2にぶら下がる子ノードf2への走査に繋げられる。
 図15(B)は、例示として結合ノード(M(a1,a2))が訪問された際に結合ノード(M(a1,a2))直下の子ノードが列挙されている様子を示す。結合ノード(M(a1,a2))に対する第1子ノード取得関数が呼び出されると、第1子ノードとして、結合ノード(M(c1,d2))が取得される。ここで、ノードc1,d2は、第1のトライ木(T1)におけるノードa1の第1子ノードc1、および第2のトライ木(T2)におけるノードa2の第1子ノードd2である。
 続いて、結合ノード(M(c1,d2))に関連して、兄弟ノード取得関数が順次呼び出され、兄弟ノードとして、結合ノード(M(g1,d2))および結合ノード(M(g1,null))が順次取得される。ここで、ノードg1は、第1のトライ木(T1)におけるノードc1の兄弟ノードb1である。
 図15(B)を参照して説明した処理により、結合トライ木(Tm)における結合ノード(M(a1,a2))直下の子ノードがすべて列挙され、キューに投入されることになる。結合ノード(M(c1,d2))、結合ノード(M(g1,d2))および結合ノード(M(g1,null)が順に走査されると、アルファベット取得関数により順次、「c」、「d」、「g」が小さい順に列挙される。同時に、結合ノード(M(c1,d2))、結合ノード(M(g1,d2))および結合ノード(M(g1,null)の各結合ノードの子ノードが、第1子ノード取得関数および兄弟ノード取得関数により順次取得され、順次キューに投入されることになる。
 図16(A)は、第1子ノード取得関数および兄弟ノード取得関数により、結合ノード(M(c1,d2))が訪問された際にその直下の子ノードが列挙されている様子を示す。図16(B)は、結合ノード(M(g1,d2))が訪問された際にその直下の子ノードが列挙されている様子を示す。
 図15および図16に例示した流れにより、図14(B)に示すように、2個のトライ木(T1,T2)を結合した結合トライ木(Tm)の各ノードを幅優先走査することに相当する走査が2個のトライ木(T1,T2)について行われる。
 図12~図16および図9を参照して上述した処理により、2個の下位LOUDS150-1,150-2から結合LOUDS162および結合ブルームフィルタ164のセット160が構築される。上記結合処理においては、結合LOUDS162および結合ブルームフィルタ164の両方が、各1回下位LOUDS150のトライ木を幅優先走査することによって構築されるため、結合LOUDS162および結合ブルームフィルタ164を別々に構築した場合と比較しても、結合処理にかかる演算コストは低減される。
 また、各1回下位LOUDS150のトライ木を幅優先走査することによってセット160が直接構築されるため、一旦下位LOUDS150のトライ木(T1,T2)を結合して結合トライ木(Tm)を構築した後に、結合トライ木を辿って上記セット160を構築する場合と比較しても、結合処理にかかる演算コストは低減される。
 さらに、結合LOUDS162は、本質的にメモリ利用効率が高い簡潔データ構造であり、結合ブルームフィルタ164も、結合LOUDS162に比べて小さく、キー数に応じたメモリ使用量で構築される。また、結合処理により、下位LOUDSの個数が抑制され、共通するプレフィックスが圧縮され、より空間効率を高くすることが可能となる。また、本実施形態においては、キーバリュー・ストア120に対するリード性能は、下位LOUDSの個数に実質的に依存しないため、結合処理がシステム全体に加える負荷が無視できない場合に、好適に上記結合処理をより遅く遅延させることが可能となる。
 なお、上述した実施形態では、2個のLOUDS150を結合するものとして説明してきたが、特に限定されるものではない。他の実施形態では、上記2個のLOUDS150を結合する構成を一般化して、各トライ木のノードが有するアルファベットの大小関係に応じたアルファベット取得関数、第1子ノード取得関数および兄弟ノード取得関数を定義することにより、3個以上のLOUDS結合処理に拡張することもできる。上記2つの結合する結合ノードの一方が,再帰的に結合ノードであった場合(M(n1,M(n2,M(n3,…))を想定し,それを再帰的に解くことにより,3個以上のLOUDS結合処理についての一般解を得ることができる。
(6)結合処理に関する証明
 上記結合ノード(M)に関する操作によって得られるノードが、結合トライ木(Tm)のノードと同一であることを、以下、木の高さに関し、帰納法を適用することにより証明する。
 まず、任意の木Tのルートr(T)のアルファベットが常に等しいとする(例えば文字列は常に記号「$」で始まるとする)。ここで、木Tの高さは、ルートr(T)から任意のリーフまでのパス長の最大値を示すものとする。例えば、ルートのみからなる木の高さは1であり、ルートの直下にリーフだけが存在する木の高さは2である。
 まず、高さ1の2個の木T1,T2の結合は、アルファベット取得関数(alphabet(r(T1), t(T2)))により自明に定まる。このとき、第1子ノード取得関数(firstChild)および兄弟ノード取得関数(Sibling)は、木T1,T2に存在しないため、走査中一度も呼ばれない。
 続いて、木の高さh>1とし、ここで、高さ(h-1)以下の任意の木T1,T2に対して、上記結合操作により正しい結合木の走査が実行されると仮定する。
 まず、走査の初期にアルファベット取得関数(alphabet(r(T1),r(T2)))が呼ばれるが、これは自明に結合木のルートを定めるものである。木T1,T2の走査を行うカーソル位置は、それぞれ木T1におけるルートの第1子ノード(firstChild(r(T1)))および木T2におけるルートの第1子ノード(firstChild(r(T2)))に移動する。このとき、
(1)木T1におけるルートの第1子ノード(firstChild(r(T1)))が存在しない場合は、木T1の走査が完了したことになり、結合ノード(M)の定義より、以後常にfirstChild(M(node1, node2))=firstChild(node2)、sibling(M(node1,node2))=sibling(node2)となる。帰納法の仮定により、木T2におけるルートの第1子ノード(firstChild(r(T2)))および兄弟ノード(Sibling(firstChild(r(T2))))、・・・をそれぞれルートとする木に関しては正しく結合されるので、木T1,T2の結合も正しく行われることになる。
(2)木T2におけるルートの第1子ノード(firstChild(r(T2)))が存在しない場合、上記(1)と同じ議論により、結合が正しく行われることになる。
(3)木T1におけるルートの第1子ノード(firstChild(r(T1)))および木T2におけるルートの第1子ノード(firstChild(r(T2)))が共に存在する場合、第1子ノード取得関数(firstChild(M(r(T1), r(T2))))の定義により、結合木のノードZが新たに1個作られる。新たなノードZをルートとする木の高さは、h-1以下であることから、帰納法の仮定により、正しく結合が行われることになる。さらに、新たなノードZをルートとする木が正しく作成されるのであるから、ノードZの作り方からノードZ自体も正しい結合に対応することになる。続いて幅優先走査により順に兄弟ノード取得関数(sibling(M(node1, node2)))を1回呼ぶ毎に新しいノードが作られるが、これも上述した第1子ノード取得関数で行ったのと同一の議論で、正しく結合が行われることになる。
(7)ハードウェア構成
 図17は、本実施形態のコンピュータ装置の概略的なハードウェア構成を示す。図17に示すコンピュータ装置100は、中央処理装置(CPU)12と、CPU12が使用するデータの高速アクセスを可能とするL1およびL2などのレベルを有するキャッシュ・メモリ14と、CPU12の処理を可能とするDRAMなどの固体メモリ素子から形成されるシステム・メモリ16とを備えている。
 CPU12、キャッシュ・メモリ14およびシステム・メモリ16は、システム・バス18を介して、他のデバイスまたはドライバ、例えば、グラフィックス・ドライバ20およびネットワーク・インタフェース・カード(NIC)22へと接続されている。グラフィックス・ドライバ20は、バスを介して外部のディスプレイ24に接続されて、CPU12による処理結果をディスプレイ画面上に表示させることができる。また、NIC22は、物理層レベルおよびデータリンク層レベルでコンピュータ装置100を、TCP/IPなどの適切な通信プロトコルを使用するネットワークへと接続している。
 システム・バス18には、さらにI/Oバス・ブリッジ26が接続されている。I/Oバス・ブリッジ26の下流側には、PCIなどのI/Oバス28を介して、IDE、ATA、ATAPI、シリアルATA、SCSI、USBなどにより、ハードディスク装置30が接続されている。また、I/Oバス28には、USBなどのバスを介して、キーボードおよびマウスなどのポインティング・デバイスなどの入力装置32が接続されていて、この入力装置32によりユーザ・インタフェースが提供される。
 コンピュータ装置100のCPU12としては、いかなるシングルコア・プロセッサまたはマルチコア・プロセッサを用いることができる。コンピュータ装置100は、WINDOWS(登録商標)200X、UNIX(登録商標)、LINUX(登録商標)などのオペレーティング・システム(以下、OSとして参照する。)により制御される。コンピュータ装置100は、上記OSの管理の下、システム・メモリ16上などにプログラムを展開し、プログラムを実行し、各ハードウェア資源を動作制御することによって、上述した機能部の構成および処理をコンピュータ上に実現する。
(7)実験
(7-1)コンピュータ装置における実装
 クロック数2.2GHzのDual Core Opteron(登録商標)275プロセッサ2機と、2MBの2次キャッシュ、4GBのPC3200のRAM、750GBのSATAインタフェースのHDD(7200rpm)2機を備えるIntelliStation(登録商標)AProを用いて、本実施形態によるキーバリュー・ストアを実現するコンピュータ装置を実装した。このコンピュータ装置のオペレーティング・システムは、Windows(登録商標)2003 Server Standard x64 Edition ServicePack2であり、上記プログラムは、Java(登録商標)言語(Version 1.6.0)によって記述した。
(7-2)LOUDS構築処理に関する実験結果
 図2に示すキーバリュー・ストア120を実現するシステムをコンピュータ装置上に構築し、本発明の実施形態によるLOUDS構築部106を実現した。所定入力サイズの構築用バッファトライ木124を準備し、この構築用バッファトライ木124からLOUDS構築処理により下位LOUDS132およびブルームフィルタ134を同時に生成した。そして、上記LOUDS構築処理を完了させるまでにかかった演算時間と、生成されたデータ構造132,134のサイズとを測定した。なお、ブルームフィルタ134は、1キーワードあたり3ビットのビット配列を準備し、2個のハッシュ関数によって各2ビットを有効化する構成とした。
 さらに、比較のため、LOUDSを単独で構築する処理のプログラムを実行し、所定入力サイズの構築用バッファトライ木124から単独でLOUDSを生成した。そして、上記単独でLOUDSを構築する処理を完了させるまでにかかった演算時間を測定した。さらに比較のため、生成されたLOUDSからキーを取り出して別途ブルームフィルタを構築する処理のプログラムを実行し、所定入力サイズの構築用バッファトライ木124から生成されたLOUDSから、ブルームフィルタを生成した。そして、上記ブルームフィルタの構築を完了させるまでにかかった演算時間を測定した。
 構築用バッファトライ木の入力キー数を650万キーワードとして行った、LOUDS構築処理(LOUDS+BF)、LOUDS単独構築処理(LOUDS単独)およびブルームフィルタ構築処理(BF)にかかる実験例を、それぞれ、実験例1、実験例2および実験例3と参照する。複数の入力キー数の構築用バッファトライ木を用いて行った、LOUDS構築処理(LOUDS+BF)およびLOUDS単独構築処理(LOUDS単独)にかかる実験例を、それぞれ、実験例4および実験例5と参照する。実験例1および実験例4は、実施例に対応する。
 図18(A)は、上記実験例1~実験例3について測定された演算時間(sec)をプロットした棒グラフである。図18(B)は、実験例1で構築されたLOUDSおよびブルームフィルタ(BF)の各データ構造のサイズを表す積み上げ棒グラフである。
 LOUDSおよびブルームフィルタを同時に生成しない場合は、データ構造132,134の生成には、図18(A)に示す実験例2および実験例3の演算時間の合計が必要となる。これに対して、図18(A)を参照すると、LOUDSを生成する過程でブルームフィルタを同時に生成する場合(実験例1)には、ブルームフィルタの生成コストは、1回のLOUDSの生成あたり約24%程度であった。
 図18(B)は、LOUDSおよびブルームフィルタのサイズを表すが、実験例1で使用した入力サイズ(650万キーワード)では、全体として1キーワードあたり9.4バイトを消費し、そのうちのブルームフィルタは、LOUDSのサイズの約6.8%を占めていた。
 図19(A)は、上記実験例4および実験例5で測定された、入力サイズ(キー数)に対し演算時間(sec)をプロットした折れ線グラフである。なお、図19(A)中、△記号で示す系列(オーバーヘッド)は、LOUDS構築処理(LOUDS+BF)およびLOUDS単独構築処理(LOUDS単独)にかかる演算時間の差分であり、ブルームフィルタの生成コストを表す。
 図19(A)を参照すると、オーバーヘッドの入力サイズ(キー数)に対する増加量が、LOUDS生成コストの増加量に比べて小さいことが理解される。つまり、キー数が増大するにつれ、ブルームフィルタの生成コストの全体に占める割合が減少することが示された。
(7-3)キー追加処理に関する実験結果
 図2に示すキーバリュー・ストア120を実現するシステムをコンピュータ装置上に構築した。そして、キーバリュー・ストア120に対し、ユニークな入力キーを追加した場合のスループットを測定した。なお、バッファサイズnは、100,000とし、同レベルのLOUDSを結合する個数を示す結合ファクタを4とした。すなわち、4個の同レベルの下位LOUDSが生じる毎に、4個の下位LOUDSから一括で1個の上位のLOUDSへ結合した。3,280,505個のキー入力数に対しては、最終的には、1,600000個のキーを含む2つのLOUDSと、80505個のキーを含むバッファトライ木が生成される。また、ブルームフィルタは、上記(7-2)の場合と同一構成とした。
 さらに、比較のため、図2に示すキーバリュー・ストア120からブルームフィルタの構成を除いたシステムをコンピュータ装置上に構築した。そして、このシステムのキーバリュー・ストアに対し、ユニークな入力キーを追加した場合のスループットを測定した。なお、バッファサイズ、結合ファクタ、ブルームフィルタの構成は、上記と同一とした。
 図2に示すシステム(LOUDS+BF)および、図2に示すキーバリュー・ストア120からブルームフィルタの構成を除いたシステム(LOUDS)について行ったキー追加処理にかかる実験例を、それぞれ、実験例6および実験例7と参照する。実験例6は、実施例に対応する。
 図19(B)は、上記実験例6および実験例7で測定されたスループットを、測定時点までに入力されたキーの数に対してプロットした折れ線グラフである。図19(B)を参照すると、上記実験例6および実験例7の両方に関して、入力キー数が増加するに伴い、LOUDSを構築するためのオーバーヘッドに起因して全体のスループットは低下する傾向が観測された。しかしながら、図19(B)に示す上記実験例6および実験例7を比較すると、実験例6には僅かにブルームフィルタ生成コストが認められるが、他のコストに隠蔽され、実験例6および実験例7間で有意な差は認められなかった。したがって、ブルームフィルタ生成の構成は、有意なパフォーマンス低下を招かないことが示された。
(7-4)キー照会処理に関する実験結果
 図2に示すキーバリュー・ストア120を実現するシステムをコンピュータ装置上に構築した。なお、バッファサイズnは、100,000とし、結合ファクタを4とし、合計3,280,505キーワードを入力して、用いるキーバリュー・ストア120を構成した。また、ブルームフィルタは、上記(7-2)の場合と同一構成とした。そして、構成されたキーバリュー・ストア120に対し、キー照会を行い、その際のスループットを測定した。
 さらに、比較のため、図2に示すキーバリュー・ストア120からブルームフィルタの構成を除いたシステムをコンピュータ装置上に構築し、上記と同一のバッファサイズ、結合ファクタ、キーワード数、ブルームフィルタの構成のキーバリュー・ストアを構成した。そして、構成されたキーバリュー・ストアに対し、キー照会を行い、その際のスループットを測定した。
 図2に示すシステム(LOUDS+BF)および図2に示すブルームフィルタの構成を除いたシステム(LOUDS)について行ったキー照会処理にかかる実験例を、それぞれ、実験例8および実験例9と参照する。実験例8は、実施例に対応する。
 図20(A)は、上記実験例8および実験例9で測定されたスループットを、キーバリュー・ストア中に照会キーが存在する場合と、存在しない場合とに分けてプロットした棒グラフである。図20(A)に示すように、存在する照会キーで問い合わせた場合は、スループットに明瞭な差は認められなかった。これは、存在する照会キーで問い合わせた場合は、いずれもLOUDSに対する照会が発生するためであると考えられる。これに対し、存在しない照会キーで問い合わせた場合は、図20(A)に示すように、実験例8および実験例9のスループットの差が顕著となった。これは、存在しないキーで問い合わせた場合は、ブルームフィルタを含まない実験例9ではすべてのLOUDSを照会する必要があるのに対して、ブルームフィルタを含む実験例8では、LOUDSへの照会が発生しないためであると考えられる。
(7-5)混合トランザクションに関する実験結果
 図2に示すキーバリュー・ストア120を実現するシステムをコンピュータ装置上に構築した。なお、バッファサイズ、結合ファクタ、キーワード数、ブルームフィルタ構成は、上記(7-3)および(7-4)と同一条件とした。そして、構成されたキーバリュー・ストア120に対し、新規追加にかかる入力キーについてキー照会を行い、入力キーが存在しない場合にだけ、キー追加処理を行うという混合トランザクションを実行し、その際のスループットを測定した。なお、新規入力キーは、入力全体の2.65%を占めた。
 さらに、比較のため、図2に示すキーバリュー・ストア120からブルームフィルタの構成を除いたシステムをコンピュータ装置上に構築し、上記と同一のバッファサイズ、結合ファクタ、キーワード数、ブルームフィルタの構成のキーバリュー・ストアを構成した。そして、キーバリュー・ストア120に対し、混合トランザクションを実行し、スループットを測定した。
 図2に示すシステム(LOUDS+BF)および図2に示すブルームフィルタの構成を除いたシステム(LOUDS)について行った混合トランザクション処理にかかる実験例を、それぞれ、実験例10および実験例11と参照する。実験例10は、実施例に対応する。
 図20(B)は、上記実験例10および実験例11で測定されたスループットをプロットした棒グラフである。図20(B)を参照すると、より現実に即していると考えられる混合トランザクションにおいても、図2に示すキーバリュー・ストア120を実現するシステムは、ブルームフィルタを用いないシステムと比べて、スループットが大幅に改善した。
(7-6)まとめ
 以上の実験結果により、本発明の実施形態によるキーバリュー・ストア120を実現するシステムによれば、構築時に大きなコストを上乗せすることなく、キーバリュー・ストア120内の各下位LOUDSに対してブルームフィルタを生成し、特に、ストア中に存在しないキーのリード性能が大幅に向上することが示された。この特性は、新しいキーを追加しながらキーおよび値を保持するキーバリュー・ストアにとって効果的である。実験結果によれば、2.5%程度の新規キーを含む入力に対して、ブルームフィルタを用いない実装に比べて、2.5倍の性能差を発揮することが実証された。
 以上説明したように、本発明の実施形態によれば、キーを空間効率高く格納するとともに、オンライン構築が可能で、データ操作性能が改善されたデータストアを実現する、情報処理装置、該データストアを操作するデータストア操作方法およびプログラムを提供することができる
 本発明の実施形態によれば、さらに、トライ木の簡潔データ構造およびフィルタを効率的に構築するためのデータ構築装置およびデータ構築方法、複数のトライ木が結合された簡潔データ構造を効率的に構築するためのデータ結合装置およびデータ結合方法、並びにこれらのプログラムを提供することができる。
 なお、本発明につき、発明の理解を容易にするために各機能部および各機能部の処理を記述したが、本発明は、上述した特定の機能部が特定の処理を実行するほか、処理効率や実装上のプログラミングなどの効率を考慮して、いかなる機能部に、上述した処理を実行するための機能を割当てることができる。
 また、本発明は、キーとして、記号として1バイト文字を用いる文字列のほか、日本語、中国語、韓国語、アラビア語などマルチ・バイトの文字の文字列に対しても適用可能であることは言うまでもない。
 本発明の上記機能は、C++、Java(登録商標)、JavaBeans(登録商標)、Java(登録商標)Applet、JavaScript(登録商標)、Perl、Rubyなどのオブジェクト指向プログラミング言語などで記述された装置実行可能なプログラムにより実現でき、装置可読な記録媒体に格納して頒布または伝送して頒布することができる。
 これまで本発明を、特定の実施形態をもって説明してきたが、本発明は、実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
12…CPU、14…キャッシュ・メモリ、16…システム・メモリ、18…システム・バス、20…グラフィック・ドライバ、22…NIC、24…ディスプレイ、26…I/Oバス・ブリッジ、28…I/Oバス、30…ハードディスク装置、32…入力装置、100…コンピュータ装置、102…バッファ準備部、104…キー追加部、106…LOUDS構築部、108…キー照会部、110…LOUDS結合部、120…キーバリュー・ストア、122…入力バッファトライ木、124…構築用バッファトライ木、130…検索用LOUDS群、132…下位LOUDS、134…ブルームフィルタ、140…新規セット、142…構築LOUDS、144…構築ブルームフィルタ、150…Level1LOUDS、152…ブルームフィルタ、154…Level2LOUDS、156…ブルームフィルタ、160…セット、162…結合LOUDS、164…結合ブルームフィルタ、500…コンピュータ装置、510…バッファトライ木、520…下位LOUDS

Claims (20)

  1.  データストアを実現する情報処理装置であって、
     入力される入力キーを受け付けて、前記データストアを構成しキーをツリー構造として維持するバッファに対し、該入力キーを追加するキー追加部と、
     前記バッファが維持するツリー構造内のノードを走査して、該ツリー構造を表現する簡潔データ構造を構築するとともに、該簡潔データ構造内にキーが存在することを近似的に判定するフィルタを構築する構築部と、
     前記データストアに対する照会キーの問い合わせに対応して探索を行う際に、簡潔データ構造を探索するのに先だって、対応するフィルタに対し該簡潔データ構造内に前記照会キーが存在することを確認する照会部と
     を含む、情報処理装置。
  2.  前記構築部は、前記バッファが維持するツリー構造内の各ノードを幅優先走査しながら、該ノードに関連する骨格部分を表すビット、該ノードへのエッジを記述する記号、および該ノードがキー末尾に対応するかを示すビットを生成する、請求項1に記載の情報処理装置。
  3.  前記構築部は、前記幅優先走査しながら、該ノードに対し計算された1以上のハッシュ値をそれぞれ子ノードのハッシュ計算の中間値として引き継ぎつつ、キー末尾に対応するノードに対し計算された1以上のハッシュ値を有効化して前記フィルタを構築する、請求項2に記載の情報処理装置。
  4.  複数の簡潔データ構造が表現するツリー構造それぞれのルートを結合した結合ルートを起点として幅優先走査することにより、前記複数の簡潔データ構造を結合し、前記複数の簡潔データ構造により表現される複数のツリー構造を結合した結合ツリー構造を表現する結合簡潔データ構造および対応する結合フィルタを構築する結合部をさらに含む、請求項1に記載の情報処理装置。
  5.  前記結合部は、結合にかかる第1の簡潔データ構造の第1ノードと第2の簡潔データ構造の第2ノードとを結合した結合ノードについて、
     前記第1ノードおよび前記第2ノードが表す記号の大小関係に応じて、前記結合ノードが表す記号を与える記号取得関数、
     前記大小関係に応じて、前記第1ノードの第1子ノード、前記第1ノードの第1子ノードと前記第2ノードの第1子ノードとの結合ノード、または前記第2ノードの第1子ノードを与える第1子ノード取得関数、および
     前記大小関係に応じて、前記第1ノードの兄弟ノードと前記第2ノードとの結合ノード、前記第1ノードの兄弟ノードと前記第2ノードの兄弟ノードとの結合ノード、または前記第1ノードと前記第2ノードの兄弟ノードとの結合ノードを与える兄弟ノード取得関数
     を含む、請求項4に記載の情報処理装置。
  6.  前記照会部は、フィルタから対応する簡潔データ構造中に照会キーが存在しない旨の応答を受けた場合は、該対応する簡潔データ構造の探索を省略する、請求項1に記載の情報処理装置。
  7.  前記バッファにn個のキーおよび値のセットが格納される毎に、新しいバッファを準備する準備部をさらに含み、
     前記構築部は、前記バッファに格納される前記セットの数がn個に達する毎に、前記n個のセットを格納するバッファから簡潔データ構造およびフィルタのセットを構築する、請求項1に記載の情報処理装置。
  8.  前記照会部は、新しいバッファおよび構築中のバッファの順に探索し、前記バッファ中に照会キーが見付からなかった場合は、新しく構築された順に、フィルタを事前確認し、対応する簡潔データ構造を探索することを特徴とする、請求項7に記載の情報処理装置。
  9.  前記バッファは、リンク構造によるトライ木を含み、前記簡潔データ構造は、LOUDS(Level-Order Unary Degree Sequence)であり、前記フィルタは、1または複数のハッシュ関数を備えるブルームフィルタであることを特徴とする、請求項1に記載の情報処理装置。
  10.  データストアを操作する方法であって、コンピュータ・システムが、
     入力操作にかかる入力キーを受け付けて、前記データストアを構成しキーをツリー構造として維持するバッファに対し、該入力キーを追加するステップと、
     前記バッファから簡潔データ構造およびフィルタを構築するステップと、
     前記データストアに対する照会キーの問い合わせに応答して探索を行うステップと
     を含み、
     前記構築するステップは、前記バッファが維持するツリー構造内のノードを走査して、該ツリー構造を表現する簡潔データ構造を構築するとともに、該簡潔データ構造内にキーが存在することを近似的に判定するフィルタを構築するステップであり、
     前記探索を行うステップは、簡潔データ構造を探索するのに先だって、対応するフィルタに対し該簡潔データ構造内に前記照会キーが存在することを確認するサブステップを含む、
     データストア操作方法。
  11.  前記走査は、幅優先走査であり、前記構築するステップは、訪れたノードについて、該ノードに関連する骨格部分を表すビット、該ノードへのエッジを記述する記号、および該ノードがキー末尾に対応するかを示すビットを生成する各サブステップを含む、請求項10に記載のデータストア操作方法。
  12.  前記構築するステップは、前記訪れたノードに対し計算された1以上のハッシュ値をそれぞれ子ノードのハッシュ計算の中間値として引き継ぐサブステップと、キー末尾に対応するノードに対し計算された1以上のハッシュ値を有効化するサブステップとをさらに含む、請求項11に記載のデータストア操作方法。
  13.  前記構築するステップは、複数の簡潔データ構造が表現するツリー構造それぞれのルートを結合した結合ルートを幅優先走査の起点として設定するサブステップを含み、
     前記幅優先走査によって、前記複数の簡潔データ構造により表現される複数のツリー構造を結合した結合ツリー構造を表現する結合簡潔データ構造および対応する結合フィルタが構築される、請求項12に記載のデータストア操作方法。
  14.  ツリー構造を表現する簡潔データ構造および対応するフィルタを構築するデータ構築装置であって、
     前記ツリー構造を走査し、該ツリー構造内の各ノードを訪れる手段と、
     前記簡潔データ構造を構成する、訪れたノードに関連する骨格部分を表すビット、該ノードへのエッジを記述する記号、および該ノードがキー末尾に対応するかを示すビットを生成する各手段と、
     前記訪れたノードに対し計算された1以上のハッシュ値をそれぞれ子ノードのハッシュ計算の中間値として引き継ぐ手段と、
     前記訪れたノードがキー末尾に対応する場合に、前記フィルタを構成するために、該ノードに対し計算された1以上のハッシュ値を有効化する手段と
     を備える、データ構築装置。
  15.  ツリー構造を表現する簡潔データ構造および対応するフィルタを構築する方法であって、コンピュータ・システムが、前記ツリー構造を走査し、該ツリー構造内の各ノードを訪れるステップを含み、前記各ノードを訪れるステップは、訪れた各ノードについて、
     前記訪れたノードに対し1以上のハッシュ値を計算するサブステップと、
     前記1以上のハッシュ値をそれぞれ該訪れたノードの子ノードのハッシュ計算の中間値として引き継ぐサブステップと、
     前記簡潔データ構造を構成する、該訪れたノードに関連する骨格部分を表すビットを生成するサブステップと、
     前記簡潔データ構造を構成する、該訪れたノードへのエッジを記述する記号を生成するサブステップと、
     該訪れたノードがキー末尾に対応する場合に、前記簡潔データ構造を構成する、該訪れたノードがキーの末尾に対応することを示すビットを生成するサブステップと、
     前記訪れたノードがキー末尾に対応する場合に、前記フィルタを構成するため該ノードに対し計算された1以上のハッシュ値を有効化するサブステップと
     を含む、データ構築方法。
  16.  複数のツリー構造を結合して構成される結合ツリー構造を表現する簡潔データ構造および対応するフィルタを構築するデータ結合装置であって、
     前記複数のツリー構造それぞれのルートを結合した結合ルートを起点として、前記複数のツリー構造それぞれを走査し、各ノードを訪れる手段と、
     前記簡潔データ構造を構成する、訪れたノードに関連する骨格部分を表すビット、該ノードへのエッジを記述する記号、および該ノードがキー末尾に対応するかを示すビットを生成する各手段と、
     前記訪れたノードに対し計算された1以上のハッシュ値をそれぞれ子ノードのハッシュ計算の中間値として引き継ぐ手段と、
     前記訪れたノードがキー末尾に対応する場合に、前記フィルタを構成するため該ノードに対し計算された1以上のハッシュ値を有効化する手段と
     を備える、データ結合装置。
  17.  複数のツリー構造を結合して構成される結合ツリー構造を表現する簡潔データ構造および対応するフィルタを構築する方法であって、コンピュータ・システムが、前記複数のツリー構造それぞれのルートを結合した結合ルートを起点として、前記複数のツリー構造それぞれを走査し、各ノードを訪れるステップを含み、前記各ノードを訪れるステップは、訪れた各ノードについて、
     前記訪れたノードに対し1以上のハッシュ値を計算するサブステップと、
     前記1以上のハッシュ値をそれぞれ該訪れたノードの子ノードのハッシュ計算の中間値として引き継ぐサブステップと、
     前記簡潔データ構造を構成する、該訪れたノードに関連する骨格部分を表すビットを生成するサブステップと、
     前記簡潔データ構造を構成する、該訪れたノードへのエッジを記述する記号を生成するサブステップと、
     前記簡潔データ構造を構成する、該訪れたノードがキー末尾に対応する場合に、該訪れたノードがキーの末尾に対応することを示すビットを生成するサブステップと、
     前記訪れたノードがキー末尾に対応する場合に、前記フィルタを構成するため該ノードに対し計算された1以上のハッシュ値を有効化するサブステップと
     を含む、データ結合方法。
  18.  請求項1に記載の各機能部としてコンピュータ・システムを機能させるためのコンピュータ実行可能なプログラム。
  19.  請求項14に記載の各手段としてコンピュータ・システムを機能させるためのコンピュータ実行可能なプログラム。
  20.  請求項16に記載の各手段としてコンピュータ・システムを機能させるためのコンピュータ実行可能なプログラム。
PCT/JP2012/070123 2011-10-11 2012-08-07 情報処理装置、データストア操作方法、データ構築装置、データ構築方法、データ結合装置、データ結合方法およびプログラム WO2013054588A1 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2011-224176 2011-10-11
JP2011224176 2011-10-11

Publications (1)

Publication Number Publication Date
WO2013054588A1 true WO2013054588A1 (ja) 2013-04-18

Family

ID=48081648

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2012/070123 WO2013054588A1 (ja) 2011-10-11 2012-08-07 情報処理装置、データストア操作方法、データ構築装置、データ構築方法、データ結合装置、データ結合方法およびプログラム

Country Status (1)

Country Link
WO (1) WO2013054588A1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210406235A1 (en) * 2020-06-30 2021-12-30 Hewlett Packard Enterprise Development Lp Key-value index with node buffers
CN114189347A (zh) * 2021-10-14 2022-03-15 北京连山科技股份有限公司 一种数据粒子化与网闸相结合的数据安全传输方法
US11461240B2 (en) 2020-10-01 2022-10-04 Hewlett Packard Enterprise Development Lp Metadata cache for storing manifest portion
US11556513B2 (en) 2020-06-30 2023-01-17 Hewlett Packard Enterprise Development Lp Generating snapshots of a key-value index

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007052698A (ja) * 2005-08-19 2007-03-01 Kddi Corp 暗号化された文書のためのインデックス生成および検索方法ならびに暗号化文書検索システム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007052698A (ja) * 2005-08-19 2007-03-01 Kddi Corp 暗号化された文書のためのインデックス生成および検索方法ならびに暗号化文書検索システム

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
DAISUKE OKANOHARA: "Kanketsu Data Kozo to Zenbun Sakuin no Kiso", WEB+DB PRESS, vol. 42, 1 February 2008 (2008-02-01), pages 42 - 48 *
KAISEI HAMAMOTO: "Tsunagaru Java Dai 4 Kai fastutil to sux ni yoru Daikibo Data Shori", WEB+DB PRESS, vol. 60, 20 January 2011 (2011-01-20), pages 201 - 209 *
TERUO KOYANAGI ET AL.: "Method to Build Bloom Filters for Online Building of LOUDS TRIE", TRANSACTIONS OF INFORMATION PROCESSING SOCIETY OF JAPAN 2012 APRIL RONBUNSHI TRANSACTION (COMPUTING SYSTEMS, vol. 5, no. 2, 15 April 2012 (2012-04-15), pages 1 - 9 *
TOSHIYUKI HANAOKA ET AL.: "Jisho to Gengo Model no Koritsu no Yoi Asshuku to Kana Kanji Henkan eno Oyo", PROCEEDINGS OF THE 17TH ANNUAL MEETING OF THE ASSOCIATION FOR NATURAL LANGUAGE PROCESSING TUTORIAL HONKAIGI WORKSHOP, 7 March 2011 (2011-03-07), pages 944 - 947 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210406235A1 (en) * 2020-06-30 2021-12-30 Hewlett Packard Enterprise Development Lp Key-value index with node buffers
US11461299B2 (en) * 2020-06-30 2022-10-04 Hewlett Packard Enterprise Development Lp Key-value index with node buffers
US11556513B2 (en) 2020-06-30 2023-01-17 Hewlett Packard Enterprise Development Lp Generating snapshots of a key-value index
US11461240B2 (en) 2020-10-01 2022-10-04 Hewlett Packard Enterprise Development Lp Metadata cache for storing manifest portion
US11803483B2 (en) 2020-10-01 2023-10-31 Hewlett Packard Enterprise Development Lp Metadata cache for storing manifest portion
CN114189347A (zh) * 2021-10-14 2022-03-15 北京连山科技股份有限公司 一种数据粒子化与网闸相结合的数据安全传输方法
CN114189347B (zh) * 2021-10-14 2022-08-05 北京连山科技股份有限公司 一种数据粒子化与网闸相结合的数据安全传输方法

Similar Documents

Publication Publication Date Title
US10810179B2 (en) Distributed graph database
US10055439B2 (en) Fast, scalable dictionary construction and maintenance
CN108446376B (zh) 数据存储方法与装置
US8229916B2 (en) Method for massively parallel multi-core text indexing
JP5950285B2 (ja) 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム
CN103890763B (zh) 信息处理装置、数据存取方法以及计算机可读存储介质
US8914415B2 (en) Serial and parallel methods for I/O efficient suffix tree construction
US9442965B2 (en) System and method for efficient representation of dynamic ranges of numeric values
CN109446362A (zh) 基于外存的图数据库结构、图数据存储方法、装置
JP2015064876A (ja) 二分木を用いてモデル化される工業製品を設計するためのコンピュータ実装方法
CN110134714A (zh) 一种适用于大数据迭代计算的分布式计算框架缓存索引
WO2013054588A1 (ja) 情報処理装置、データストア操作方法、データ構築装置、データ構築方法、データ結合装置、データ結合方法およびプログラム
CN112925954B (zh) 用于在图数据库中查询数据的方法和装置
US20080270352A1 (en) Modifying entry names in directory server
US20230367815A1 (en) Energy-efficient hardware-software collaborative method and apparatus for graph processing
CN105302536A (zh) MapReduce应用的相关参数的配置方法和装置
US20200104425A1 (en) Techniques for lossless and lossy large-scale graph summarization
JP5790755B2 (ja) データベース管理装置及びデータベース管理方法
Rachadi et al. Self avoiding paths routing algorithm in scale-free networks
Sherk Self-adjusting k-ary search trees
AU2019425530B2 (en) Systems and methods for hash chain migrations
WO2023093023A1 (zh) 一种敏感词过滤方法及装置、存储介质
CN115858522A (zh) 基于树的索引结构的局部压缩
CN113934361B (zh) 用于管理存储系统的方法、设备和计算机程序产品
US11995040B2 (en) Multi-node storage system and method data de-duplication method for the same

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 12839618

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

NENP Non-entry into the national phase

Ref country code: JP

122 Ep: pct application non-entry in european phase

Ref document number: 12839618

Country of ref document: EP

Kind code of ref document: A1