CouchDB

时间:2016-07-21 16:02:50

标签: performance database-design view couchdb

我有两个具有相似数据的数据库(组织方式不同),我为每个返回相同响应的视图创建了一个视图。我注意到查询的时间响应是不同的,甚至返回相同的响应,一个是3182ms,另一个是大约217ms,查询了5次。 我使用以下方式查询:

curl -x GET ...db1/_design/query1/view/q1?group=true and
curl -x GET ...db2/_design/query1/view/q1?group=true.

我使用curl -x GET ...db1/_design/query1/_info.检查了设计文档的数据大小。第一个的设计数据大小是146073878个咬,第二个是3739596个咬。 我认为它们应该具有相同的大小,因为它们返回相同的视图,并且我没有使用任何过滤器,两个视图相同。 有人可以解释为什么不同数据库创建的相同视图有不同的大小?

我的数据是使用两个不同的根组织的,但相同的数据只更改根:

根目录中的客户数据:

{
   "c_customer_sk": 65836,
   "c_first_name": "Frank",
   "c_last_name": "White",

   "store_sales": [
       {
           "ss_sales_price": 20.24,
           "ss_ext_sales_price": 1012,
           "ss_coupon_amt": 0,
           "date": [
               {
                   "d_month_seq": 1187,
                   "d_year": 1998
               }
           ],
           "item": [
               {
                   "i_item_sk": 10454,
                   "i_item_id": "AAAAAAAAGNICAAAA",
                   "i_item_desc": "Results highlight as patterns; so right years show. Sometimes suitable lips move with the critics. English, old mothers ought to lift now perhaps future managers. Active, single ch",
                   "i_current_price": 2.88,
                   "i_class": "romance",
                   "i_category_id": 9,
                   "i_category": "Books"
               }
           ]
       },
       {
            "ss_sales_price": 225,
           "ss_ext_sales_price": 1023,
           "ss_coupon_amt": 0,...

在根目录中查看客户的功能:

function(doc) 
{ 
   for each (store_sales in doc.store_sales) {
var s=store_sales.ss_ext_sales_price;
if(s==null){s=0}
for each (item in store_sales.item){
 var item_id=item.i_item_id;
 var item_desc=item.i_item_desc;
 var category=item.i_category;
 var class=item.i_class;
 var price=item.i_current_price;}
 if(category=="Music" || category=="Home" || category=="Sports"){
        for each (date in store_sales.date){
            var g=date.d_month_seq;}
            if (g>=1200 && g<=1211){
               emit({item_id:item_id,item_desc:item_desc, category:category, class:class, current_price:price},s);
        }   
   }}}

reduce:_sum   

答案示例: 键: {&#34; item_id&#34;:&#34; AAAAAAAAAAAEAAAA&#34;,&#34; item_desc&#34;:&#34;费率预计可能是必要的事件。 Circumstan&#34;,&#34; category&#34;:&#34; Sports&#34;,&#34; class&#34;:&#34; optics&#34;,&#34; current_price&#34;: 3.99}

值: 106079.49999999999

根目录中的项目数据:

{
  "i_item_sk": 10454,
  "i_item_id": "AAAAAAAAGNICAAAA",
  "i_item_desc": "Results highlight as patterns; so right years show. Sometimes suitable lips move with the critics. English, old mothers ought to lift now perhaps future managers. Active, single ch",
  "i_current_price": 2.88,
  "i_class": "romance",
  "i_category_id": 9,
  "i_category": "Books",
   "store_sales": [
       {
           "ss_sales_price": 20.24,
           "ss_ext_sales_price": 1012,
           "ss_coupon_amt": 0,
           "date": [
               {
                   "d_month_seq": 1187,
                   "d_year": 1998
               }
           ],
           "customer": [
               { 
                   "c_customer_sk": 65836,
                   "c_first_name": "Frank",
                   "c_last_name": "White",
               }
           ]
       },
       {
            "ss_sales_price": 225,
           "ss_ext_sales_price": 1023,
           "ss_coupon_amt": 0,...       

查看root上的项目:

function(doc) 
{ 
var item_id=doc.i_item_id;
 var item_desc=doc.i_item_desc;
 var category=doc.i_category;
 var class=doc.i_class;
 var price=doc.i_current_price;
  if(category=="Music" || category=="Home" || category=="Sports"){
for each (store_sales in doc.store_sales) {
var s=store_sales.ss_ext_sales_price;
if(s==null){s=0}
        for each (date in store_sales.date){
            var g=date.d_month_seq;}
            if (g>=1200 && g<=1211){
               emit({item_id:item_id,item_desc:item_desc, category:category, class:class, current_price:price},s);
        }   
   }}} 

 reduce:_sum   

回答相同的答案。

我已经对数据库的设计和时间响应进行了清理和压缩,其中itens数据在根目录中的速度要快得多,而且数据大小也很小,但我不知道为什么。 有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

这可能是数据库压缩的区别吗?将现有数据库复制到空数据库时,只会将每个文档的最后一个数据库发送到新数据库,这样可能会更轻松。 The same applies to views