Mongo 大資料字段去重的實現

2021-09-26 13:58:30 字數 4460 閱讀 8343

elasticsearch

數量級

索引業務需要實時對集合中的tel去重

$pipeline=[

['$match'

=>

$where],

['$group'

=>

['_id'

=>

'$tel']]

,['$group'

=>

['_id'

=>1,

'count'

=>

['$sum'

=>1]

]],]

;// 防止大資料溢位

$allowdiskuse=[

'allowdiskuse'

=>

true];

$list

= mongocrawlertels:

:raw

(function

($collection

)use

($pipeline

,$allowdiskuse))

;

致命的是寫入檔案的時間 ,消耗了超過17秒, 所以沒有辦法滿足效能需求測試(當前消耗的記憶體)

$memory_start

=memory_get_usage()

;// 設定**號碼列表

$start_time

=microtime

(true);

$arr=[

];//$total = (3000000 + 7000*365) * 0.7;

$total

=3000000

*0.7

;for($i

=0;$i

<

$total;$i

++)$end_time

=microtime

(true);

$memory_end

=memory_get_usage()

;$memory_now

=$memory_end/(

1024

*1024);

$memory_need=(

$memory_end

-$memory_start)/

(1024

*1024);

$memory_get_peak_usage

=memory_get_peak_usage()

/(1024

*1024);

$msg

='消耗記憶體 : '

.$memory_need

.'mb , 總分配: '

.$memory_get_peak_usage

.' mb 當前消耗: '

.$memory_now

.' mb 插入的數量 : '.$i

.' 消耗時間 '.(

$end_time

-$start_time).

'秒, 去重後的數量'

.count

($arr);

echo

$msg

.php_eol

;

推測一年後的記憶體使用情況
+ 每天增長7000

+ 重複的部分 30%

$memory_start

=memory_get_usage()

;// 設定**號碼列表

$start_time

=microtime

(true);

$arr=[

];$total=(

3000000

+7000

*365)*

0.7;

for($i=

0;$i<

$total;$i

++)$end_time

=microtime

(true);

$memory_end

=memory_get_usage()

;$memory_now

=$memory_end/(

1024

*1024);

$memory_need=(

$memory_end

-$memory_start)/

(1024

*1024);

$memory_get_peak_usage

=memory_get_peak_usage()

/(1024

*1024);

$msg

='消耗記憶體 : '

.$memory_need

.'mb , 總分配: '

.$memory_get_peak_usage

.' mb 當前消耗: '

.$memory_now

.' mb 插入的數量 : '.$i

.' 消耗時間 '.(

$end_time

-$start_time).

'秒, 去重後的數量'

.count

($arr);

echo

$msg

.php_eol

;

/**

* 去重號碼數量

* @param array $where

*/private

function

_setuniquetelnumberforlist

(array

$where))

;$memory_start

=memory_get_usage()

;// 設定**號碼列表

$start_time

=microtime

(true);

$i=0;

foreach

($cursor

as$item

)$end_time

=microtime

(true);

$memory_end

=memory_get_usage()

;$memory_now

=$memory_end/(

1024

*1024);

$memory_need=(

$memory_end

-$memory_start)/

(1024

*1024);

$memory_get_peak_usage

=memory_get_peak_usage()

/(1024

*1024);

$msg

='消耗記憶體 : '

.$memory_need

.'mb , 總分配: '

.$memory_get_peak_usage

.' mb 當前消耗: '

.$memory_now

.' mb '

.$this

->

product_id

.' 插入的數量 : '.$i

.' 消耗時間 '.(

$end_time

-$start_time).

'秒, 去重後的數量'

.count

($this

->

list_tel_list

['all']?

?);$action

='unqiue'

;$params

=request()

->

post()

; mongolog:

:create

(compact

('msg'

,'action'

,'params'))

;}

php 多執行緒es vs mongo 游標拉去資料的速度

mongo 聚合操作

bitmap實現大資料排序和去重

要點 假如有10億元素,全部資料讀進記憶體,占用 1000000000 4 1024 1024 1024 3.725 g,解決方法 bitmap演算法,每一位都能表示一位數字,10000000000 8 1024 1024 1024 0.116 g,節約了31倍的空間!define sizebit ...

如何加大資料字段的設定

以下 用於在資料庫中增大對某些資料的定義值,例如增加商品型號的長度 商品名稱的長度 客戶姓名的長度 商品分類名稱的長度 賬單位址的長度等等。在後台的 工具 安裝sql指令碼 執行以下 alter table products modify products model varchar 256 alt...

Access資料字段內容去換行回車TAB符號函式

今天發現以前新增的資料字段數值包含有個空白的好象換行的符號 以前批量新增資料 是 form表單 表單提交的引數包含換行,使用函式 asp處理函式 servernamelist trim request servername arrayservername split servernamelist,c...