• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Efficient Flexible M-Tree Bulk Loading Using FastMap and Space-Filling Curves

    2021-12-15 12:46:08WoongKeeLoh
    Computers Materials&Continua 2021年2期

    Woong-Kee Loh

    Department of Software, Gachon University, Seongnam,13120, South Korea

    Abstract:Many database applications currently deal with objects in a metric space.Examples of such objects include unstructured multimedia objects and points of interest (POIs)in a road network.The M-tree is a dynamic index structure that facilitates an efficient search for objects in a metric space.Studies have been conducted on the bulk loading of large datasets in an M-tree.However,because previous algorithms involve excessive distance computations and disk accesses,they perform poorly in terms of their index construction and search capability.This study proposes two efficient M-tree bulk loading algorithms.Our algorithms minimize the number of distance computations and disk accesses using FastMap and a space-filling curve, thereby significantly improving the index construction and search performance.Our second algorithm is an extension of the first, and it incorporates a partitioning clustering technique and flexible node architecture to further improve the search performance.Through the use of various synthetic and real-world datasets, the experimental results demonstrated that our algorithms improved the index construction performance by up to three orders of magnitude and the search performance by up to 20.3 times over the previous algorithm.

    Keywords: M-tree;metric space;bulk loading;FastMap;space-filling curve

    1 Introduction

    Many recent database applications deal with objects that are difficult to represent as points in a Euclidean space.Examples include the applications of unstructured multimedia objects such as images, voices, and texts [1-3], as well as those dealing with points of interest (POIs) in road networks [4-6].These applications define the appropriate distance (or similarity) functions between two arbitrary objects, and the complexity of computing the distances is often much higher than that of computingLpdistance in a Euclidean space.For example, in a road network application, the distance between two objects (vertices)is defined as the sum of the weights of the edges composing the shortest path between the objects.The complexity of Dijkstra’s algorithm,which has been widely used for finding the shortest path, is as high aswhereEandVare the numbers of edges and vertices, respectively.

    Ametric spaceis formally defined as a pair (D,d),where D is a domain of objects andd:D×D →Ris a distance function with the following properties:

    1)d(Oa,Ob)=d(Ob,Oa) (symmetry)

    2)d(Oa,Ob)>0(a=b) andd(Oa,Oa)=0(non-negativity)

    3)d(Oa,Ob)≤d(Oa,Oc)+d(Ob,Oc)(triangle inequality)

    The M-tree [7] is a dynamic index structure that facilitates an efficient search for objects in a metric space [8,9].As the size of datasets used in recent applications continues to increase, it is crucial to construct and apply an indexing structure efficiently.Because it is highly inefficient and expensive to insert many objects into an index structure individually and sequentially, studies have been conducted on the bulk loading of large datasets in an M-tree [10-12].However, because previous algorithms have involved excessive distance computations and disk accesses, they perform poorly in terms of their index construction and search capability.

    Many recent metric space applications deal with highly dynamic datasets.For example,in road network applications,traffic situations change continuously owing to vehicle movements,unexpected accidents,and construction projects, etc.[13,14].For such applications, it is crucial to quickly reorganize the indexes to reflect any changes in the datasets.When significant changes occur in a dataset as in road network applications, bulk loading is advantageous compared to updating almost the entire index.Moreover,many recent applications support various complicated queries, along with traditional proximity queries(range andk-NN queries).Examples include aggregate nearest neighbor (ANN) and flexible aggregate nearest neighbor (FANN) queries in road networks [6,14].Studies have been recently conducted on the efficient processing of various queries including ANN and FANN using the M-tree[4,5].

    In this study,we propose two efficient M-tree bulk loading algorithms that overcome the weaknesses of the previous algorithms.Our algorithms minimize the number of distance computations and disk accesses using FastMap [15] and a space-filling curve [16], thereby significantly improving the index construction and search performance.FastMap is a multidimensional scaling (MDS) method [17,18] that maps every object in a metric space into a point in a κ-dimensional Euclidean space (κ ≥1) such that the relative distances are maintained as much as possible.As mentioned above, because the cost of distance computations in a Euclidean space is much lower than that in a metric space, FastMap helps improve the index construction and search performance.The space-filling curve is used to define a total order among κ-dimensional points such that nearby κ-dimensional points are closely ordered.The one-dimensional sequence of ordered points is partitioned to form groups of nearby objects, and each group is stored in an M-tree node.

    Our second algorithm is an extension of the first.It incorporates a partitioning clustering technique[19]and flexible node architecture to further improve the search performance.The clustering technique helps gather nearby objects and thereby minimize the size of the regions of object groups.The smaller region also reduces intersections with the search range, resulting in an improved search performance.The flexible node architecture is an adaptation of the concept of X-treesupernodes[20] composed of multiple contiguous disk pages, which are generated when it is anticipated to be beneficial to avoid splitting into a few nodes for a better search performance.

    We compared the performance of our algorithms and the previous algorithm proposed by Ciaccia et al.[10]through experiments using synthetic and real-world datasets.The synthetic datasets were composed of objects in eight Gaussian clusters in a Euclidean space.For various dataset sizes (N) and dimensions(d), we compared the elapsed execution time and the number of distance computations and disk accesses for both index construction andk-nearest neighbor (k-NN) search.The results showed that our algorithms improved the index construction performance by up to three orders of magnitude over the previous algorithm.In particular, our second algorithm achieved a 20.3-fold improvement in the search performance.The real-world datasets were road networks (graphs) of various sizes obtained from the District of Columbia and five states in the United States.We conducted the experiments using these datasets in the same manner as the experiments using the synthetic datasets.The results demonstrated that our algorithms also improved the index construction performance by up to three orders of magnitude and that our second algorithm improved the search performance by up to 2.3 times.

    The remainder of this paper is organized as follows.Section 2 describes the architecture of the M-tree and previous M-tree bulk loading algorithms.Sections 3 and 4 provide the details regarding our bulk loading algorithms.Section 5 describes the results of the experiments comparing the performance of index construction andk-NN search using various datasets.Finally, Section 6 concludes this paper.

    2 Related Work

    The M-tree has a multilevel balanced tree structure similar to the R-tree[21].Fig.1a shows the structure of an M-tree leaf node entry, which corresponds to an objectOiin the dataset.In the figure,f Oi( ) is the feature value(s) representingOi;oid Oi( ) is the object ID ofOi; andis the distance betweenOiand the parent objectOp.Theparent object Opis an object that represents all objectsOiin the same leaf node and is determined using Eq.(1).

    Figure 1:M-tree leaf node.(a) Leaf node entry.(b) Region corresponding to a leaf node

    A leaf node is represented as a circular region centered byOpwith radiusThis region is minimized to reduce the intersection with the query range based on a query objectQand,thus, to improve the search performance by avoiding access to unnecessary nodes.Fig.1b shows a leaf node represented as a region containing all objectsOiand a parent objectOp.If an object that satisfies Eq.(1) were found in the Euclidean space, it would be close to the center of all objectsOiin the leaf node.However,unlike in a Euclidean space, the concept of “center” is not defined in the metric space.

    Fig.2a shows the structure of an M-tree non-leaf node entry, which corresponds to a leaf or non-leaf nodeRin an M-tree.In the figure,(f Or) indicates the feature value(s) representing the routing object(Or;r Or)is the radius,which is called thecovering radius;ptr( T (Or))is the pointer to the sub-tree( T Or)rooted byRcorresponding to the entry; andis the distance betweenOrand the parent objectOp.Therouting objectis chosen as the parent object of the nodeRcorresponding to the entry.The parent objectOpin a non-leaf node, similar to that in a leaf node, is an object that represents all entriesEiin the same node and is determined as a routing object satisfying Eq.(2).

    Figure 2:M-tree non-leaf node.(a) Non-leaf node entry.(b) Region corresponding to a non-leaf node

    A non-leaf node is also represented as a circular region centered byOpwith radiusFig.2b shows a non-leaf node represented as a region containing the regions ofRand a parent objectOp.The leaf and non-leaf nodes of an M-tree are typically saved in a disk page of 4 KB size similarly to other index structures.

    The first M-tree bulk loading algorithm, which is abbreviated asBulkLoadherein, was proposed by Ciaccia and Patella [10].In BulkLoad,karbitrary sample objectsOfi(i= 1..k) are initially extracted from a dataset D of sizeN, and each of the remaining objects is assigned to the nearest sample object, thereby creatingksample sets Fi.Then, for each sample set, the same task is recursively conducted to create a sub-tree Ti.Finally, an M-tree is constructed by creating a root node containing the entries corresponding to all root nodesRof theksub-trees.In this algorithm, to create the initialksample sets, distance computations of(O kN) complexity have to be performed.This task has to be recursively conducted until all leaf nodes are created in each sample set, that is, all the lowest level sub-sample sets have no more thanMobjects.Thus, assuming an even distribution of objects, the complexity of the entire algorithm isO( khN), wherehis the height of the M-tree.By settingk=M, becauseh≈logMN, the complexity of the algorithm iswhereMis the maximum number of entries in a leaf or non-leaf node(M≥1).The problem of BulkLoad is that the final M-tree is highly dependent on the initial and subsequent selection of the sample objects.Moreover, because the objects among the sample sets are not evenly distributed, the final tree is not balanced.To solve this problem, BulkLoad redistributes the objects across sample sets; however, this incurs a large number of disk accesses, thereby significantly degrading the overall performance[11].

    Sexton et al.[12]proposed an M-tree bulk loading algorithm to enhance the search performance.This algorithm generates an M-tree node by gathering nearby objects using a hierarchical clustering technique.However,the algorithm performs distance computations for all possible object pairs to find the closest pair,and the complexity isO N2( ).Because this task should be repeated until all objects are contained in clusters,the complexity of the entire algorithm isO N3( ), which is extremely high.Sexton et al.[12] compared the search performance of their algorithm only with the sequential insertion version of the M-tree generation algorithm [7] but not with BulkLoad [10].Qiu et al.[11] proposed a parallel extension of BulkLoad.However, this algorithm merely splits the tasks of BulkLoad among multiple cores; thus, the disadvantages of BulkLoad persist.In particular, a significant degradation in the performance occurs not only by saving the intermediate results for object redistribution in a disk, but also due to I/O conflicts occurring when several threads try to access the same intermediate results simultaneously[11].

    As described above,previous M-tree bulk loading algorithms apply excessive distance computations and disk accesses,thereby heavily degrading their performance.Our algorithms proposed in this study improve the bulk loading and search performance by reducing the number of distance computations and disk accesses significantly.In addition, the performance of our algorithms can be further improved in a multi-core environment through a simple parallelization.We describe our algorithms in detail in the next two sections.

    3 FastLoad:Fast Bulk Loading Algorithm

    Algorithm 1:FastLoad Algorithm

    Our first M-tree bulk loading algorithm,which is calledFastLoadhere,is designed to improve the index construction and search performance by minimizing the number of distance computations and disk accesses.Alg.1 shows the structure of FastLoad,and Tab.1 summarizes the notations in this study.

    Table 1:Summary of notations

    Each step of Alg.1 is described in detail.In line 1,FastLoad maps each objectOj(j=1..N)in a dataset D in a metric space to a pointin a κ-dimensional Euclidean space using FastMap.With respect to the arbitrary (κ ≥1) given in advance, FastMap finds the points such that the relative distances are maintained as much as possible[15].

    In line 2,the κ-dimensional points obtained above are sorted to generate a one-dimensional sequenceSof the points.FastLoad uses a space-filling curve[16]to have the points that are close to each other in the κ-dimensional space remain at a minimal distance in the one-dimensional sequence.The space-filling curve sequentially visits each object once on the κ-dimensional grid, and the order of each point is determined based on the visiting order.Among many space-filling curves including Z curve, Hilbert curve, and Graycode curve, FastLoad uses the Hilbert curve.

    In line 3, the one-dimensional sequenceSis partitioned to create a series of groups of contiguous μM~Mpoints, whereis theminimum storage utilization ratio.In line 4, a leaf node is created for each group with the objectsOjin the metric space corresponding to all pointsin the group.Since the one-dimensional sequence was generated such that the relative distances of the objects in the original metric space are closely maintained, it is highly probable that the objects corresponding to the points in a group are actually close to each other in the metric space also.

    In line 3, the one-dimensional sequenceSis partitioned into groups as follows.Sis scanned from the beginning and the first μM~Mcontiguous points inSare extracted to form a groupGof the points.For the sequenceS-Gof the remaining points, the same task is performed repetitively until there are μMor less points in the sequence.To maximize the space utilization of an M-tree, it is best to includeMpoints in every group.However, even for the pointsandin the same group, their corresponding objectsOaandObin the metric space may be distant from each other.In such a case,the size of the node region corresponding to the group will increase, thereby degrading the search performance.In this study,we propose three partition methods,namedFULLPAGE,HEURISTIC,andRIGOROUS,as follows:

    ? FULLPAGEAll groups are fully filled withMcontiguous points.

    ? HEURISTICEach group is initially filled with μMpoints, andd/nis computed, wheredis the distance between the first and the last points in the group, andn=μ(M) is the number of points.For each subsequent point extracted fromSand added in the group,d′/n′is computed, whered′is the distance between the first and the newly added points, andn′is the number of points.Ifd′/n′>d/n, it indicates that the average region size for each point increases; therefore, the group is finalized with(n′-1)points.

    ?RIGOROUSAmong the candidate groups containing μM, μM+ 1, ...,Mcontiguous points,the one with the smallestr/nis chosen, whereris the radius of the corresponding region, andnis the number of points.

    In the HEURISTIC and RIGOROUS methods,since the actual distanced()between two objectsOaandObin the metric space is expensive to compute,it is replaced with^d()between two pointsandin the κ-dimensional Euclidean space.By sacrificing a small degree of correctness, the speed of distance computation is improved.

    A leaf node for a point group is generated as follows.While κ-dimensional pointswere used for generating groups of contiguous points, the original objectsOjin the metric space are used for M-tree node generation.A leaf node is represented by a circular region centered byOpwith radiusThe distance is computed for all object pairs to determine the objectOpthat satisfies Eq.(1), and the complexity is as high asTherefore, in FastLoad,Opis set to be an objectOjcorresponding to the pointthat minimizeswhereCis the κ-dimensional Euclidean center of the region containing all pointsin the group, andis computed using the actual distance(d),The complexity for computing “cheap” distances () to findandOpisO(M), and that for computing “expensive” distances(d) is reduced toO(M).The complexity of distance(d) computations for all groups isO(N), assuming that the total number of groups isN/M.Note thatMis not changed depending on the application and dataset sizeN, which is much larger thanM(M?N).

    For each leaf node generated in line 4,one non-leaf node entry is generated.In lines 6 and 7,the tasks similar to those in lines 3 and 4 are performed for the sequence of non-leaf entries.When splitting the sequence into a series of groups of contiguous entries in line 6, one of FULLPAGE, HEURISTIC, and RIGOROUS methods is chosen as in line 3.While only the distance between two points in each group is considered in line 3, the radius of the region for each entry is also considered in line 6 as shown in Eq.(2), i.e.,+Ei.r(Or)+Ej.r(Or), whereEiandEjdenote any two entries in the group.In line 7, the tasks similar to those in line 4 are performed, except that Eq.(2) is used to determine the parent object.Lines 6 and 7 are executed repeatedly, and when the number of non-leaf entries is less than or equal toM,the entries are stored in the root node.

    The overhead of distance computations in FastLoad is as follows.The complexity of FastMap in line 1 of Alg.1 isO(κN) [15].The complexity of HEURISTIC and RIGOUROUS methods in lines 3 and 4 isO(N) as explained above (O(1 ) for FULLPAGE).Therefore, the overall complexity of FastLoad isO(κN),which is lower than the complexityof BulkLoad since κ <Min most cases.

    The complexity presented above is related to the “number” of distance computations.The overall computational complexity should be the product of the number of distance computations and the cost of a single distance computation.In general, applications dealing with objects in metric spaces have various definitions of “expensive” distancesd()as mentioned in Section 1,and in most applications, the complexity of computing distanced() is much higher than that of computing “cheap” distance(), which is at mostO(κ ).Therefore, in our study, we contributed in reducing the overall computational overhead by reducing the number of“expensive”distance computations fromO(M2)toO(M) when making each node.

    The overhead of disk accesses in FastLoad is as follows.In Alg.1,lines 4,7,and 9 access the disk,i.e.,store the M-tree nodes in the disk.Since the leaf nodes generated in line 4 do not have to be referred to anywhere else, they are stored in the disk sequentially.The same is also true for the non-leaf nodes generated in lines 7 and 9.Therefore, the number of disk accesses in FastLoad is equal to the number of nodes in the final M-tree.In general, sequential access of disk pages (or M-tree nodes) is much faster than random access of the same number of pages.The performance of FastLoad can be improved further by saving the nodes in a memory buffer and later flushing them altogether simultaneously in the disk at an appropriate time point, rather than storing each of them immediately and separately in the disk.In case of sufficient memory size, only a single sequential disk access can store the entire M-tree in the disk,thereby further improving the performance of FastLoad.

    The performance of FastLoad can be improved further, by simple parallelization in a multi-core environment, as follows.In lines 1 and 2, the computations of distances in FastMap and space-filling curves can be performed in parallel in multiple concurrent threads as they are independent for each object.In lines 3 and 4, the one-dimensional sequenceSis divided into a few sub-sequences of possibly different sizes, and each sub-sequence is assigned to one of concurrent threads to construct the corresponding sub-tree in parallel.In the parallel algorithm by Qiu et al.[11], since the number of objects assigned to each thread is not constant, the objects or sub-trees should be exchanged among threads,which dramatically reduces the degree of parallelization.In contrast, FastLoad is more efficient, since all operations in each thread can be run independently of the others.

    4 FlexLoad:Flexible Bulk Loading Algorithm

    Algorithm 2:FlexLoad Algorithm

    Algorithm 3:Re-distribution of points in FlexLoad

    Our second bulk loading algorithm, which is calledFlexLoadhere, is designed to improve the search performance further by gathering nearby objects in a node using a partitioning clustering technique [19].In case the number of objects in a node exceeds the capacity of a disk page, the node is stored in multiple contiguous disk pages.This feature of FlexLoad is an adaptation of the concept of X-tree supernodes [20].Berchtold et al.[20] found that as the dimension of a Euclidean space increases, the overlap between the node regions in an R-tree storing the points in the space also increases, thereby degrading the search performance heavily.An X-tree supernode is made when it is anticipated to be beneficial to avoid splitting into a few nodes for better search performance.The M-tree built by FastLoad also suffers from a similar phenomenon when dealing with the datasets originating from a highdimensional Euclidean space or real-world datasets requiring high dimension κ for FastMap.In general,accessing sequential disk pages is much more efficient than randomly accessing the same number of disk pages, and the cost of accessing a few sequential disk pages is almost equal to that of accessing one disk page.Therefore, FlexLoad is anticipated to have a better search performance; the experimental results will be shown in the next section.

    Alg.2 shows the structure of FlexLoad,which is very similar to that of FastLoad;lines 3 and 6 of Alg.1 are replaced with lines 3~4 and 7~8 of Alg.2, respectively.In line 3 of Alg.2, the point sequenceSgenerated in line 2 is evenly split into a set of point groups of equal size μMwithout using any specific splitting method, such as FULLPAGE, HEURISTIC, and RIGOROUS, in FastLoad.In line 4, the points in the groups are re-distributed to gather nearby points and thereby minimize the size of regions of the point groups,as shown in Alg.3.Lines 7~8 of Alg.2 perform the same operations for non-leaf entries as lines 3~4.

    In Alg.3, the “while” loop continues until there is no change in the point groups or for pre-specified times.In the experiments detailed in the next section, we obtained good groups by repeating the loop only 2~3 times.In each iteration, the κ-dimensional Euclidean centerof the region containing all points of each groupGiis computed as in FastLoad.Then, the closest centeris found for each pointin all the groups, and the latter is moved into the corresponding groupGi.Here, we use the “cheap”distance ^d() for efficient index construction as in FastLoad.

    The groups obtained by Alg.3 contain a variable number of points depending on the actual object distribution, and some groups may contain more thanMpoints.In such a case, even when the overfull group is split into a few groups of sizes ≤M, those groups are very likely to be accessed together during the search owing to the locality of the points in the groups.Moreover, if the split groups are stored in the nodes scattered in the disk and/or the sum of the regions of the split groups is larger than the region of the before-split group, there will be a severe degradation in overall search performance.Therefore,FlexLoad stores the point group of size >Min a node composed of multiple contiguous disk pages in a manner similar to that by the X-tree[20].

    FlexLoad has almost the same cost for distanced()computations and disk accesses as FastLoad.Lines 3~4 and 7~8 in Alg.3, which are the only portions different from Alg.1, compute only() distances as explained above.The nodes created by FlexLoad are only stored in the disk and never accessed again as in FastLoad.Lines 3~5 of Alg.3 incur substantial computational overhead since() distance must be computed for each combination of centersand pointsand it is repeated a few times in the “while”loop.However, since each distance computation is independent and can be performed concurrently with the others, the overall execution time of FlexLoad can be reduced by simple parallelization; the distance computations in lines 3~5 are distributed in many concurrent threads.Our experimental result revealed that the parallelization improved the performance of FlexLoad by 2.4 times on average.Since FastLoad is parallelized similar to FlexLoad, we believe that the performance of a parallel extension of FastLoad is improved to a similar degree.

    The spatial complexity of our algorithms,FastLoad and FlexLoad,isO Nκ( ),which is needed for storing all κ-dimensional pointsobtained using FastMap,as shown in line 1 of Algs.1 and 2.In our experiments,the largest number of objects in the synthetic datasets isN= 1 M, and the largest dataset dimension isd= κ = 20.By representing each coordinate value as 8-bytedoubledata type, the main memory of size 1 GB is sufficient for running our algorithms.The size (number of POIs) of the largest real-world dataset in our experiments is approximatelyN= 1 M, and the size of the entire US road network is approximatelyN= 22.8 M [13,14].By setting κ = 8 and using the same data type for coordinate values,the main memory of size 2 GB is sufficient.Since most recent computers are equipped with main memories of considerably larger sizes, the performance of our algorithms is affected only slightly by the size of the main memory.

    If an M-tree node is stored in disk whenever it is created by our algorithms, only the representative values shown in Fig.2a are preserved in the main memory for each node, and the respective nodes are deallocated.In lines 4 and 8 in Alg.2, when the points are re-distributed, FlexLoad maintains only the center and radius for each point group.These aspects also reduce the effect of the main memory on the performance of our algorithms.

    If each M-tree node is stored separately in disk,it incurs random disk accesses.If all the M-tree nodes are gathered in a main memory buffer and are stored in disk together in the end,it incurs only a single sequential disk access.In general,sequential access on HDDs and SSDs is more efficient than a random access of the same size at the cost of the main memory buffer.The sizes (in MBs) of the M-trees built by using our algorithms are small, as shown in Tabs.2, 4, and 6; i.e., our algorithms require only a small amount of the main memory even when they gather all the M-tree nodes in a buffer for efficient disk accesses.Therefore, we can see once more that the size of the main memory only slightly affects the performance of our algorithms.

    Table 2:Sizes(in MB)of M-trees built by our algorithms for various dataset sizes(N)

    Table 3:Value of M for each dimension d

    Table 4:Sizes(in MB)of M-trees built by our algorithms for various data dimensions(d)

    5 Experimental Evaluation

    In this section,we demonstrate through experiments that our algorithms FastLoad and FlexLoad outperform BulkLoad [10] in M-tree construction and search by reducing the number of distance computations and disk accesses.The platform for the experiments is a workstation with an Intel i7-6950X CPU,64 GB memory,and 512 GB SSD.The CPU has 10 cores and can run 20 concurrent threads.We implemented FastLoad and FlexLoad in C/C++and used the source code of BulkLoad written in C/C++by the original authors1http://www-db.deis.unibo.it/Mtree/.

    We use both synthetic and real-world datasets for experiments in this study.The synthetic datasets used in the first through fourth experiments consist ofd-dimensional objects contained in eight Gaussian clusters generated using the ELKI dataset generator2http://elki.dbs.ifi.lmu.de/wiki/DataSetGenerator.The centers of the Gaussian clusters were randomly chosen in ad-dimensional cube [0.1,0.9d],such that the distance between any two centers was not less thanThe standard deviation for each cluster was chosen randomly in the rangeWe set“expensive”distanced()as the Euclidean distance(L2metric)between two objects for all algorithms FastLoad,FlexLoad,and BulkLoad,whose computational complexity is as low asO d( ),wheredis data dimension,considered to ensure the same settings as in the previous studies.Although such a low complexity is favorable for BulkLoad,we show that FastLoad and FlexLoad outperform BulkLoad.

    The first experiment compares the execution time and the number of distance computations and disk accesses while building the M-trees for various dataset sizesN.FastLoad is tested separately for each of the three methods in Section 3.We use two-dimensional synthetic datasets and set κ = 2 for FastMap.The minimum storage utilization ratios for FastLoad/FlexLoad and BulkLoad are set as μ = 0.5 and 0.4,respectively, and their disk page sizes are 4 KB.Fig.3 shows the result of the first experiment.The FastLoad algorithms using the FULLPAGE, HEURISTIC, and RIGOROUS methods are denoted as FastLoad-F, FastLoad-H, and FastLoad-R, respectively.FlexLoad-P stands for a parallel version of FlexLoad as described in Section 4.Note that the vertical axis of Fig.3a is represented in the logarithmic scale.Tab.2 summarizes the sizes of the M-trees built by our algorithms for variousN.BulkLoad could not finish building the M-tree for a dataset of size 1M.FastLoad-R performed a larger number of distance computations and required longer execution time than the other FastLoad algorithms as expected.FlexLoad also took a long execution time due to ^d() computations, while it performed almost the same number ofd() computations and disk accesses as the other algorithms.Figs.3a-3c show the superiority of our algorithms; especially, FastLoad-F and FastLoad-H outperformed BulkLoad by up to three orders of magnitude.

    Figure 3:Comparison of M-tree construction performance for various dataset sizes(N).(a)Execution time(seconds).(b)Number of distance computations.(c) Number of disk page accesses

    The second experiment compares thek-nearest neighbor (k-NN) search performance for variouskvalues.The dataset of size 256 K used in the first experiment is also used in this experiment.For eachk,k-NN search is performed for each of 10,000 random query objects.Fig.4a shows the average execution time per query in milliseconds.Figs.4b and 4c show the average number of distance computations and disk accesses.FlexLoad exhibited the best search performance of all algorithms due to gathering manner of nearby objects in the same node described in Section 4.FlexLoad outperformed BulkLoad by up to 20.3 times fork= 1.Among FastLoad algorithms, although FastLoad-R required longer execution time for M-tree construction than the others, its performance fork-NN search was the best.FastLoad-R outperformed BulkLoad by up to 1.85 times fork= 50; FastLoad-F and FastLoad-H also demonstrated similar performances.

    Figure 4:Comparison of k-nearest neighbor search performance using the M-trees (N = 256 K).(a)Execution time (milliseconds).(b)Number of distance computations.(c) Number of disk page accesses

    The third experiment compares the M-tree construction performance for various data dimensionsd.The dataset of size 128 K in this experiment is generated in the same manner as in the first experiment.We set κ=dfor FastMap.The value ofMfor each dimensiondin FastLoad/FlexLoad is summarized in Tab.3.Fig.5 shows the result.Note that the vertical axis of Fig.5a is represented in the logarithmic scale.Tab.4 summarizes the sizes of the M-trees built by our algorithms for variousd.In Fig.5b,as the data dimension increases, the number of distance computations of FastLoad/FlexLoad also increases since κ for FastMap increases.In Fig.5c, the number of disk accesses increases since as the data dimension increases the size of an object increases, the number of objects in a disk page of a fixed size decreases, and the number of disk pages to store all objects increases.In Fig.5a, the execution time of FastLoad-R decreases ford≤10 since the number of objects in a disk page decreases, and the number of distance ^d()computations to determineOpfor all object pairs in the page also decreases.The execution time of FastLoad-R increases ford≥10, owing to the increase in distanced() computations and disk page accesses similar to FastLoad-F and FastLoad-H.Similar to the first experiment, FastLoad-F and FastLoad-H outperformed BulkLoad by up to three orders of magnitude and was faster than even FlexLoad-P.Tab.3 shows that asdincreases,Mdecreases.With smallMvalues, the performance of an algorithm becomes more sensitive to the cost of an “expensive” distance computation rather than the value ofM.Therefore, since FastLoad performs a smaller number of “expensive” distance computations than BulkLoad,we can conclude that FastLoad is superior to BulkLoad.

    Figure 5:Comparison of M-tree construction performance for various dimensions(d).(a) Execution time(seconds).(b)Number of distance computations.(c) Number of disk page accesses

    The fourth experiment comparesk-NN search performance in the same manner as in the second experiment using a 20-dimensional dataset of size 128 K.The result is shown in Fig.6.FlexLoad again exhibited the best search performance of all algorithms; it outperformed BulkLoad by up to 4.08 times fork= 1.FastLoad algorithms showed worse search performance than BulkLoad.Nevertheless, the difference in searching time for FastLoad and BulkLoad for a singlek-NN search is as tiny as about 25 milliseconds.Therefore, FastLoad algorithms are useful in most applications that fast index construction matters and a slight delay in search can be ignored.

    Figure 6:Comparison of k-nearest neighbor search performance using the M-trees(d=20).(a)Execution time (milliseconds).(b)Number of distance computations.(c) Number of disk page accesses

    The real-world datasets used in our fifth and sixth experiments are road networks (graphs) from five states and the District of Columbia in the United States, as released by the US Census Bureau and used for the 9th DIMACS Implementation Challenge3http://users.diag.uniroma1.it/challenge9/data/tiger/and in many previous studies [13,14].The datasets are summarized in Tab.5.Each dataset is composed of a set of vertices (geographic points) and a set of undirected edges (road segments connecting two points).Each vertex consists of its ID and geographical coordinates (longitude and latitude); each edge consists of (source ID, target ID), travel time (weight),spatial distance in meters, and road category (e.g., interstate, local).The datasets include noise such as self-loops and unconnected components as noted in [14]; we cleaned this up in the pre-processing step.

    Table 5:Road network datasets

    In our experiments,the distanced()between two vertices is defined as their shortest path distance.As explained in Section 1,the complexity to find the shortest path is as high asO(E+VlogV),whereEandVare the number of edges and vertices, respectively.There have been many studies on reducing the computational overhead of the shortest path problem [22-25].We adopted thepruned highway labeling(PHL)algorithm[26,27],which is known to perform the best at computing the shortest path distance[13,14].PHL extracts representative shortest paths,such as interstate or highway paths with a small travel time,from the graph;for each vertex,it then stores the distances to the representative shortest paths from the vertex in the index.We used the PHL source code written in C/C++ by the original authors4https://github.com/kawatea/pruned-highway-labeling.

    The fifth experiment compares the M-tree construction performance for each of the road network datasets in Tab.5.We set κ=8 for FastMap and the minimum storage utilization ratio as μ=0.5 and 0.1 for FastLoad/FlexLoad and BulkLoad,respectively.The results are shown in Fig.7.Note that the vertical axis of Fig.7a is represented in the logarithmic scale.Tab.6 summarizes the sizes of the M-trees built by our algorithms for various road networks.BulkLoad could not finish building an M-tree for the datasets larger than NV, and the higher μ made it unstable.BulkLoad had a smaller number of distance computations than FastLoad-R and FlexLoad, as shown in Fig.7b; however, since it made many more disk accesses, as in Fig.7c, both FastLoad and FlexLoad demonstrated a much better overall performance, as shown in Fig.7a.FlexLoad needed a longer execution time than FastLoad owing to a number of ^d() distance computations, as in the previous experiments.FastLoad-F and FastLoad-H outperformed BulkLoad by up to three orders of magnitude,as it did in the first and third experiments,and it was also faster than even FlexLoad-P.

    Figure 7:Comparison of M-tree construction performance for various real-world road networks.(a)Execution time (seconds).(b)Number of distance computations.(c) Number of disk page accesses

    Table 6:Sizes(in MB) of M-trees built by our algorithms for various road networks

    The sixth experiment compares thek-NN search performance using the NV dataset in the same manner as the second and fourth experiments.Fig.8 shows the result.FlexLoad demonstrated the best performance,outperforming BulkLoad by up to 2.3 times fork= 1.FastLoad algorithms were slightly slower than BulkLoad, as they were in the fourth experiment; however, the difference in execution time for a singlek-NN search between the two was only 0.35 milliseconds, which is almost negligible.Therefore,FastLoad is more appropriate than BulkLoad for most applications given its faster index construction.

    We did not compare the performance of our algorithms, FastLoad and FlexLoad, with that of the algorithms in [11,12] since it is evident that our algorithms significantly outperform them.The objective of the algorithm by Sexton et al.[12]is to improve the search performance using the M-tree,rather than fast construction of the M-tree.As mentioned in Section 2,the complexity of constructing an M-tree using the algorithm [12] is as high asO N3( ), which is considerably higher than the complexityO(MNlogMN)(N?M) of BulkLoad [10].In addition, there is no claim regarding the performance for constructing M-trees in [12].The algorithm by Qiu et al.[11] simply splits the tasks of BulkLoad among multiple CPU cores, as described in Section 2.Thus, the ratio of the performance improvement cannot be higher than the number of CPU cores, and an experimental result showed that the performance improved by up to 2.33 times when using a quad-core CPU [11].Since our algorithms outperform BulkLoad by up to three orders of magnitude,it is clear that they also dramatically outperform the algorithms by[12]and[11].

    Figure 8:Comparison of k-nearest neighbor search performance using the M-trees(road network=NV).(a)Execution time (milliseconds).(b)Number of distance computations.(c) Number of disk page accesses

    6 Conclusions

    In this study,we proposed two efficient M-tree bulk loading algorithms,FastLoad and FlexLoad,which outperform previous algorithms.Our algorithms minimize the numbers of distance computations and disk accesses using FastMap [15] and a space-filling curve [16], thereby significantly improving the index construction and search performance.We experimentally compared the performance of our algorithms with that of a previous algorithm, BulkLoad, using various synthetic and real-world datasets.The results showed that both FastLoad and FlexLoad improved the index construction performance by up to three orders of magnitude and that FlexLoad improved the search performance by up to 20.3 times.

    FlexLoad required a longer execution time for index construction than the FastLoad algorithms owing to a number of^d()distance computations,as described in Section 4,even under similar numbers of distanced()computations and disk accesses.Additionally, FastLoad-F and FastLoad-H were shown to be faster than FlexLoad-P.However, as anticipated, FlexLoad achieved a better search performance than the FastLoad algorithms.Furthermore, although the FastLoad algorithms were slightly slower than BulkLoad for certain datasets, the difference was mostly negligible.In conclusion, we believe that both FastLoad and FlexLoad can be used in a variety of database applications.

    Funding Statement:This work was supported by the National Research Foundation of Korea(NRF,www.nrf.re.kr) grant funded by the Korean government (MSIT, www.msit.go.kr) (No.2018R1A2B6009188)(received by W.-K.Loh).

    Conflicts of Interest:The authors declare that they have no conflicts of interest to report regarding the present study.

    国产欧美日韩一区二区三区在线| 国产又爽黄色视频| 99国产极品粉嫩在线观看| 人人妻,人人澡人人爽秒播| 村上凉子中文字幕在线| 国产一卡二卡三卡精品| 亚洲久久久国产精品| 国产成人精品在线电影| 日韩高清综合在线| 两人在一起打扑克的视频| 伦理电影免费视频| 亚洲国产精品合色在线| 妹子高潮喷水视频| 国产在线观看jvid| 国产免费现黄频在线看| 视频区欧美日本亚洲| 日本免费a在线| 国产成人影院久久av| 欧美丝袜亚洲另类 | 国产高清videossex| 精品高清国产在线一区| 99久久久亚洲精品蜜臀av| 亚洲第一青青草原| 日韩高清综合在线| xxx96com| 超碰97精品在线观看| 婷婷六月久久综合丁香| 久久天躁狠狠躁夜夜2o2o| 久久久久久亚洲精品国产蜜桃av| 一本大道久久a久久精品| 日韩欧美国产一区二区入口| 国产一区二区三区在线臀色熟女 | 村上凉子中文字幕在线| 国产精品一区二区三区四区久久 | 亚洲视频免费观看视频| 国产黄色免费在线视频| 黄片播放在线免费| 每晚都被弄得嗷嗷叫到高潮| av有码第一页| 免费在线观看亚洲国产| 国产伦一二天堂av在线观看| 国产在线观看jvid| 一级片免费观看大全| 精品午夜福利视频在线观看一区| 在线观看免费高清a一片| 色尼玛亚洲综合影院| 亚洲va日本ⅴa欧美va伊人久久| 精品久久久久久久久久免费视频 | 久久影院123| 国产精品爽爽va在线观看网站 | 老熟妇乱子伦视频在线观看| 国产片内射在线| 久久久国产一区二区| 国产精品影院久久| 欧美大码av| 亚洲欧洲精品一区二区精品久久久| www.熟女人妻精品国产| 久久久久久久久免费视频了| 久久国产亚洲av麻豆专区| 高清欧美精品videossex| 国产精品国产高清国产av| 少妇 在线观看| 麻豆久久精品国产亚洲av | 亚洲熟妇熟女久久| tocl精华| 真人做人爱边吃奶动态| 男女午夜视频在线观看| 久久99一区二区三区| www国产在线视频色| 香蕉久久夜色| 国产又爽黄色视频| 日韩高清综合在线| 日日夜夜操网爽| 老司机靠b影院| 免费高清视频大片| 美女 人体艺术 gogo| 看免费av毛片| 97碰自拍视频| 久久精品国产亚洲av高清一级| 久久草成人影院| 日韩国内少妇激情av| 亚洲自拍偷在线| 国产亚洲精品久久久久5区| 成人国语在线视频| 水蜜桃什么品种好| 人人妻人人爽人人添夜夜欢视频| 在线观看日韩欧美| 亚洲专区字幕在线| 在线永久观看黄色视频| 亚洲五月天丁香| 成人18禁在线播放| 亚洲成人久久性| 亚洲精品粉嫩美女一区| 久久久久久亚洲精品国产蜜桃av| 国产乱人伦免费视频| 日本 av在线| 亚洲精华国产精华精| www.熟女人妻精品国产| 午夜视频精品福利| av在线天堂中文字幕 | 亚洲成人久久性| 亚洲精品美女久久av网站| 如日韩欧美国产精品一区二区三区| 9色porny在线观看| 神马国产精品三级电影在线观看 | 黄色成人免费大全| 天堂√8在线中文| 欧美日韩一级在线毛片| 高清欧美精品videossex| 日本欧美视频一区| 桃红色精品国产亚洲av| 在线观看免费高清a一片| 日本五十路高清| 日韩欧美免费精品| 中文字幕最新亚洲高清| 嫩草影视91久久| 国产精品av久久久久免费| 18美女黄网站色大片免费观看| www.999成人在线观看| 女人精品久久久久毛片| 99久久国产精品久久久| 中文字幕人妻熟女乱码| 免费看十八禁软件| 免费人成视频x8x8入口观看| 成年人黄色毛片网站| 美女扒开内裤让男人捅视频| 一级毛片精品| 一级黄色大片毛片| 国产成人系列免费观看| 在线天堂中文资源库| a级毛片在线看网站| 夜夜夜夜夜久久久久| 一级毛片女人18水好多| 亚洲精品一卡2卡三卡4卡5卡| 国产野战对白在线观看| 欧美日韩中文字幕国产精品一区二区三区 | 波多野结衣一区麻豆| 高潮久久久久久久久久久不卡| 国产高清视频在线播放一区| 51午夜福利影视在线观看| 亚洲精品国产一区二区精华液| 午夜两性在线视频| 国内毛片毛片毛片毛片毛片| www.精华液| 精品国产超薄肉色丝袜足j| 啦啦啦 在线观看视频| e午夜精品久久久久久久| 岛国在线观看网站| 日韩三级视频一区二区三区| 桃色一区二区三区在线观看| 麻豆成人av在线观看| 亚洲精品粉嫩美女一区| 法律面前人人平等表现在哪些方面| 中文亚洲av片在线观看爽| 亚洲熟妇熟女久久| 亚洲精品国产一区二区精华液| 在线观看www视频免费| 五月开心婷婷网| 久久久国产成人精品二区 | 99在线视频只有这里精品首页| 久久久久久久久中文| 成人三级黄色视频| 男人操女人黄网站| 日韩精品中文字幕看吧| 美女高潮到喷水免费观看| 十分钟在线观看高清视频www| 一级a爱视频在线免费观看| 亚洲久久久国产精品| 99久久精品国产亚洲精品| 色老头精品视频在线观看| 亚洲,欧美精品.| 国产精品美女特级片免费视频播放器 | 色婷婷久久久亚洲欧美| 男女床上黄色一级片免费看| 自拍欧美九色日韩亚洲蝌蚪91| 亚洲人成网站在线播放欧美日韩| 国产免费现黄频在线看| 国产精品一区二区在线不卡| 国产亚洲精品第一综合不卡| 1024视频免费在线观看| 好看av亚洲va欧美ⅴa在| 一区福利在线观看| x7x7x7水蜜桃| 动漫黄色视频在线观看| 天天添夜夜摸| 丰满迷人的少妇在线观看| 波多野结衣高清无吗| 亚洲aⅴ乱码一区二区在线播放 | 亚洲av第一区精品v没综合| 国产精品一区二区在线不卡| 美女大奶头视频| 国产精品久久视频播放| 精品久久久精品久久久| 免费高清视频大片| 免费av中文字幕在线| 少妇裸体淫交视频免费看高清 | 亚洲少妇的诱惑av| 亚洲五月婷婷丁香| 两性午夜刺激爽爽歪歪视频在线观看 | 女人被躁到高潮嗷嗷叫费观| 亚洲片人在线观看| 成年人免费黄色播放视频| 日韩大码丰满熟妇| 成熟少妇高潮喷水视频| 岛国在线观看网站| 午夜福利欧美成人| 欧美日韩乱码在线| 首页视频小说图片口味搜索| 国产亚洲精品一区二区www| 黑人巨大精品欧美一区二区蜜桃| 亚洲精品粉嫩美女一区| 制服诱惑二区| 久久人妻av系列| 亚洲人成网站在线播放欧美日韩| 91麻豆精品激情在线观看国产 | 亚洲中文字幕日韩| 19禁男女啪啪无遮挡网站| 欧美另类亚洲清纯唯美| 欧美日本亚洲视频在线播放| 精品熟女少妇八av免费久了| 女同久久另类99精品国产91| 免费女性裸体啪啪无遮挡网站| xxx96com| 精品人妻在线不人妻| 亚洲色图 男人天堂 中文字幕| 咕卡用的链子| 99在线人妻在线中文字幕| www国产在线视频色| 国产无遮挡羞羞视频在线观看| 俄罗斯特黄特色一大片| 免费一级毛片在线播放高清视频 | 色精品久久人妻99蜜桃| 亚洲专区字幕在线| 国产精品爽爽va在线观看网站 | 久久久国产欧美日韩av| 成人免费观看视频高清| 成人手机av| 免费一级毛片在线播放高清视频 | 亚洲精品在线美女| 国产免费av片在线观看野外av| a级毛片在线看网站| 色婷婷av一区二区三区视频| 亚洲片人在线观看| 亚洲精华国产精华精| 久久国产精品人妻蜜桃| 不卡一级毛片| 亚洲熟妇中文字幕五十中出 | 国产欧美日韩一区二区三区在线| 国产亚洲欧美在线一区二区| 很黄的视频免费| 无限看片的www在线观看| 一级a爱片免费观看的视频| 91精品三级在线观看| 亚洲五月天丁香| 国产亚洲欧美98| 日日摸夜夜添夜夜添小说| 国产精品国产高清国产av| 国产深夜福利视频在线观看| 亚洲av美国av| 久久久久九九精品影院| 99国产精品99久久久久| 精品人妻在线不人妻| 88av欧美| 日韩一卡2卡3卡4卡2021年| 久久久久久久久中文| 欧美在线黄色| 国产av又大| 在线国产一区二区在线| 国产视频一区二区在线看| 天天影视国产精品| 俄罗斯特黄特色一大片| 亚洲人成伊人成综合网2020| 亚洲欧美日韩高清在线视频| 一二三四在线观看免费中文在| 免费少妇av软件| 一级,二级,三级黄色视频| 高清在线国产一区| 欧美成人午夜精品| 日韩成人在线观看一区二区三区| 久久人妻熟女aⅴ| 成熟少妇高潮喷水视频| 欧美激情久久久久久爽电影 | 色播在线永久视频| 久久久久久免费高清国产稀缺| 亚洲精品一二三| 久9热在线精品视频| 久久久久久久久中文| 亚洲国产毛片av蜜桃av| 国产成人精品久久二区二区91| √禁漫天堂资源中文www| 在线观看免费视频日本深夜| 亚洲成av片中文字幕在线观看| 久久久精品国产亚洲av高清涩受| 午夜91福利影院| 亚洲精品久久成人aⅴ小说| 久久天躁狠狠躁夜夜2o2o| 99精品在免费线老司机午夜| 亚洲精品一区av在线观看| 亚洲黑人精品在线| 国产日韩一区二区三区精品不卡| 精品国产亚洲在线| 欧美av亚洲av综合av国产av| 欧美黑人精品巨大| 亚洲欧美一区二区三区黑人| 日韩av在线大香蕉| 日韩一卡2卡3卡4卡2021年| 日韩国内少妇激情av| 丰满的人妻完整版| 亚洲五月婷婷丁香| 99精品在免费线老司机午夜| 大型黄色视频在线免费观看| 久久人妻福利社区极品人妻图片| 夫妻午夜视频| 日本黄色视频三级网站网址| 亚洲av日韩精品久久久久久密| 狂野欧美激情性xxxx| 九色亚洲精品在线播放| 日本精品一区二区三区蜜桃| 无人区码免费观看不卡| 国产成+人综合+亚洲专区| 另类亚洲欧美激情| 久久久国产成人免费| 在线观看舔阴道视频| 欧美激情 高清一区二区三区| 法律面前人人平等表现在哪些方面| 村上凉子中文字幕在线| 女人被狂操c到高潮| 天天躁夜夜躁狠狠躁躁| 18禁黄网站禁片午夜丰满| 妹子高潮喷水视频| 真人一进一出gif抽搐免费| 侵犯人妻中文字幕一二三四区| 亚洲一码二码三码区别大吗| 欧美精品啪啪一区二区三区| 99国产精品一区二区蜜桃av| 欧美激情久久久久久爽电影 | 十分钟在线观看高清视频www| 自线自在国产av| 一级作爱视频免费观看| 欧美日韩亚洲高清精品| 操出白浆在线播放| 999久久久国产精品视频| 亚洲五月婷婷丁香| 久久久久久免费高清国产稀缺| 高清毛片免费观看视频网站 | 亚洲精品中文字幕一二三四区| 夜夜躁狠狠躁天天躁| 免费少妇av软件| 久久久久久久精品吃奶| 最新在线观看一区二区三区| 中文字幕高清在线视频| 天天躁狠狠躁夜夜躁狠狠躁| 日韩人妻精品一区2区三区| 亚洲精品久久午夜乱码| 成人国产一区最新在线观看| 男女下面插进去视频免费观看| 欧美日韩亚洲国产一区二区在线观看| 身体一侧抽搐| 欧美激情高清一区二区三区| 欧美中文日本在线观看视频| 欧美不卡视频在线免费观看 | 无人区码免费观看不卡| 色播在线永久视频| 日韩成人在线观看一区二区三区| tocl精华| 日日爽夜夜爽网站| 村上凉子中文字幕在线| 日韩欧美免费精品| 亚洲第一欧美日韩一区二区三区| 亚洲欧美激情在线| 天天躁夜夜躁狠狠躁躁| 免费在线观看完整版高清| 欧美成狂野欧美在线观看| 美国免费a级毛片| 国产一卡二卡三卡精品| aaaaa片日本免费| 一级a爱视频在线免费观看| 久久久久久大精品| 91麻豆av在线| 亚洲欧美日韩无卡精品| 在线看a的网站| 脱女人内裤的视频| 日韩成人在线观看一区二区三区| 高清毛片免费观看视频网站 | 国产在线观看jvid| 两性夫妻黄色片| 欧美日韩瑟瑟在线播放| 国产精品久久久久久人妻精品电影| 不卡av一区二区三区| 久久人妻熟女aⅴ| 日韩国内少妇激情av| 性色av乱码一区二区三区2| 99国产精品一区二区三区| 亚洲av第一区精品v没综合| 欧美乱色亚洲激情| 欧美在线一区亚洲| 午夜两性在线视频| 午夜精品在线福利| 亚洲专区中文字幕在线| 桃色一区二区三区在线观看| 在线视频色国产色| 国产成人啪精品午夜网站| 另类亚洲欧美激情| 黄色a级毛片大全视频| 亚洲成av片中文字幕在线观看| 精品第一国产精品| 久久亚洲精品不卡| 免费在线观看亚洲国产| 亚洲国产精品合色在线| 啦啦啦 在线观看视频| 丰满迷人的少妇在线观看| 搡老岳熟女国产| 天天添夜夜摸| 精品久久久久久成人av| 91成人精品电影| 叶爱在线成人免费视频播放| 亚洲男人的天堂狠狠| av天堂在线播放| 日本撒尿小便嘘嘘汇集6| 国产亚洲精品第一综合不卡| 美女扒开内裤让男人捅视频| 亚洲精品一二三| 我的亚洲天堂| 淫秽高清视频在线观看| 搡老熟女国产l中国老女人| 久久中文字幕一级| 亚洲av五月六月丁香网| 大香蕉久久成人网| 999久久久国产精品视频| 日本撒尿小便嘘嘘汇集6| 亚洲国产精品999在线| 亚洲男人的天堂狠狠| 国产精品国产av在线观看| xxx96com| 久久草成人影院| 亚洲第一av免费看| 在线播放国产精品三级| 天堂√8在线中文| 久久久久久久久中文| 日韩欧美免费精品| 水蜜桃什么品种好| 制服诱惑二区| 亚洲少妇的诱惑av| 免费久久久久久久精品成人欧美视频| 免费av毛片视频| 免费观看精品视频网站| 99精国产麻豆久久婷婷| 成年版毛片免费区| 国产精品成人在线| 人人妻,人人澡人人爽秒播| 久久精品国产99精品国产亚洲性色 | 国产精品综合久久久久久久免费 | 99热国产这里只有精品6| av天堂在线播放| 大码成人一级视频| 18禁国产床啪视频网站| 可以在线观看毛片的网站| 极品教师在线免费播放| 精品福利观看| 男人操女人黄网站| 色在线成人网| 国产av一区在线观看免费| 亚洲精品美女久久久久99蜜臀| 色播在线永久视频| 交换朋友夫妻互换小说| 久久久久久免费高清国产稀缺| 国产国语露脸激情在线看| 国产精品久久久av美女十八| 级片在线观看| 国产三级黄色录像| 免费日韩欧美在线观看| 青草久久国产| 精品人妻1区二区| 欧美日韩亚洲国产一区二区在线观看| 免费在线观看完整版高清| 中文字幕高清在线视频| 国产成人精品久久二区二区91| 久久香蕉精品热| bbb黄色大片| 国产在线观看jvid| 最近最新中文字幕大全电影3 | 嫩草影视91久久| 精品久久蜜臀av无| 岛国视频午夜一区免费看| 热re99久久国产66热| 狠狠狠狠99中文字幕| 欧美成人午夜精品| 国产麻豆69| 免费少妇av软件| 91大片在线观看| 90打野战视频偷拍视频| 亚洲av五月六月丁香网| 麻豆国产av国片精品| 欧美日本亚洲视频在线播放| 国产高清videossex| 亚洲精品国产精品久久久不卡| 国产熟女xx| 啪啪无遮挡十八禁网站| 午夜视频精品福利| 99久久综合精品五月天人人| 深夜精品福利| 搡老熟女国产l中国老女人| 一级,二级,三级黄色视频| 一进一出抽搐gif免费好疼 | 国产精品二区激情视频| 亚洲一区二区三区不卡视频| 一边摸一边抽搐一进一小说| 亚洲全国av大片| 国产精品亚洲av一区麻豆| 最好的美女福利视频网| e午夜精品久久久久久久| 精品一区二区三区视频在线观看免费 | 久久精品成人免费网站| 超碰成人久久| 在线看a的网站| 又黄又粗又硬又大视频| 淫秽高清视频在线观看| 久久影院123| 亚洲男人天堂网一区| 搡老乐熟女国产| 午夜福利欧美成人| 色综合欧美亚洲国产小说| 免费少妇av软件| 99久久综合精品五月天人人| 天天影视国产精品| 老司机午夜福利在线观看视频| 日本欧美视频一区| 色综合欧美亚洲国产小说| 99re在线观看精品视频| 欧美成人免费av一区二区三区| 天天影视国产精品| 老司机福利观看| 在线观看免费视频网站a站| 国产成人啪精品午夜网站| 国产免费av片在线观看野外av| √禁漫天堂资源中文www| 男女做爰动态图高潮gif福利片 | 中文欧美无线码| 久久婷婷成人综合色麻豆| 精品熟女少妇八av免费久了| 新久久久久国产一级毛片| 级片在线观看| 亚洲性夜色夜夜综合| 亚洲专区国产一区二区| 国产麻豆69| 在线永久观看黄色视频| 精品国产国语对白av| 高清毛片免费观看视频网站 | 后天国语完整版免费观看| 亚洲欧美日韩无卡精品| 50天的宝宝边吃奶边哭怎么回事| 久久精品国产亚洲av高清一级| 老汉色∧v一级毛片| 可以免费在线观看a视频的电影网站| 亚洲成av片中文字幕在线观看| 久久精品亚洲熟妇少妇任你| 国产精品久久视频播放| 亚洲少妇的诱惑av| 男女之事视频高清在线观看| 999精品在线视频| 久久久国产一区二区| av有码第一页| 亚洲欧美日韩另类电影网站| 最新在线观看一区二区三区| 国产精品二区激情视频| 久久久久国产精品人妻aⅴ院| 欧美日韩视频精品一区| 欧美日韩亚洲高清精品| 精品一区二区三区四区五区乱码| 韩国av一区二区三区四区| 怎么达到女性高潮| 老汉色av国产亚洲站长工具| av电影中文网址| 男女下面插进去视频免费观看| 超碰97精品在线观看| 夜夜夜夜夜久久久久| 在线永久观看黄色视频| 一级毛片精品| 满18在线观看网站| 夜夜看夜夜爽夜夜摸 | svipshipincom国产片| 长腿黑丝高跟| 两性午夜刺激爽爽歪歪视频在线观看 | 欧美老熟妇乱子伦牲交| 日日爽夜夜爽网站| 亚洲欧美一区二区三区黑人| av免费在线观看网站| 中文字幕人妻熟女乱码| 亚洲精品一区av在线观看| 久久久国产成人精品二区 | 国产精品一区二区在线不卡| 啦啦啦 在线观看视频| 国产成+人综合+亚洲专区| 1024视频免费在线观看| 999久久久国产精品视频| 久久草成人影院| 亚洲男人天堂网一区| 亚洲欧美一区二区三区久久| 亚洲一码二码三码区别大吗| 精品一区二区三区视频在线观看免费 | 热99re8久久精品国产| 在线视频色国产色| 级片在线观看| 精品久久久久久久毛片微露脸| 欧美日韩精品网址| 高清毛片免费观看视频网站 | 亚洲国产看品久久| www.熟女人妻精品国产| 欧美日本中文国产一区发布| 色播在线永久视频| 免费搜索国产男女视频| 不卡一级毛片| 十分钟在线观看高清视频www| 少妇被粗大的猛进出69影院| 亚洲精品久久午夜乱码|