Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
yii2_fecshop
提交
29e7bae3
Y
yii2_fecshop
项目概览
OpenDocCN
/
yii2_fecshop
通知
17
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
yii2_fecshop
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
29e7bae3
编写于
7月 19, 2019
作者:
T
Terry
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
将mysql数据库中的分类以及产品数据,同步到mnongodb的脚本
上级
8b457e32
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
250 addition
and
0 deletion
+250
-0
app/console/modules/Category/controllers/MysqldatatomongoController.php
...dules/Category/controllers/MysqldatatomongoController.php
+115
-0
app/console/modules/Product/controllers/MysqldatatomongoController.php
...odules/Product/controllers/MysqldatatomongoController.php
+85
-0
shell/product/syncCategoryAndProducMysqlDataToMongo.sh
shell/product/syncCategoryAndProducMysqlDataToMongo.sh
+50
-0
未找到文件。
app/console/modules/Category/controllers/MysqldatatomongoController.php
0 → 100644
浏览文件 @
29e7bae3
<?php
/**
* FecShop file.
*
* @link http://www.fecshop.com/
* @copyright Copyright (c) 2016 FecShop Software LLC
* @license http://www.fecshop.com/license/
*/
namespace
fecshop\app\console\modules\Category\controllers
;
use
Yii
;
use
yii\console\Controller
;
/**
* @author Terry Zhao <2358269014@qq.com>
* @since 1.0
*/
class
MysqldatatomongoController
extends
Controller
{
public
$numPerPage
=
10
;
public
function
init
()
{
Yii
::
$service
->
category
->
changeToMysqlStorage
();
parent
::
init
();
}
/**
* mongodb 同步过来的分类信息,根据mongodb中的上下级分类关系,初始化上下级。
*/
public
function
actionInitparentid
(
$pageNum
=
1
)
{
Yii
::
$service
->
category
->
changeToMongoStorage
();
$filter
=
[
'numPerPage'
=>
$this
->
numPerPage
,
'pageNum'
=>
$pageNum
,
'orderBy'
=>
[
'id'
=>
SORT_ASC
],
'asArray'
=>
false
,
];
$data
=
Yii
::
$service
->
category
->
apiColl
(
$filter
);
$coll
=
$data
[
'coll'
];
foreach
(
$coll
as
$category
)
{
//$origin_mysql_id
$origin_mysql_parent_id
=
$category
[
'origin_mysql_parent_id'
];
$origin_mysql_id
=
$category
[
'origin_mysql_id'
];
// 如果不是mongdb同步过来的数据,直接continue
if
(
!
$origin_mysql_id
)
{
continue
;
}
// 如果上级分类id为空,则代表是一级分类,parent_id 为0
// 如果上级分类id不为空,则通过mongodbParentId查询到数据,找到mysql表中的parentId
if
(
$origin_mysql_parent_id
)
{
$categoryParent
=
Yii
::
$service
->
category
->
findOne
([
'origin_mysql_id'
=>
$origin_mysql_parent_id
]);
if
(
$categoryParent
&&
$categoryParent
[
'_id'
])
{
$category
->
parent_id
=
(
string
)
$categoryParent
[
'_id'
];
$category
->
updated_at
=
time
();
$category
->
save
();
}
}
else
{
$category
->
parent_id
=
'0'
;
$category
->
updated_at
=
time
();
$category
->
save
();
}
}
}
/**
* 同步数据
*/
public
function
actionSync
(
$pageNum
=
1
)
{
$filter
=
[
'numPerPage'
=>
$this
->
numPerPage
,
'pageNum'
=>
$pageNum
,
'orderBy'
=>
[
'id'
=>
SORT_ASC
],
'asArray'
=>
false
,
];
$data
=
Yii
::
$service
->
category
->
coll
(
$filter
);
$coll
=
$data
[
'coll'
];
Yii
::
$service
->
category
->
changeToMongoStorage
();
foreach
(
$coll
as
$category
)
{
$arr
=
[];
$mongoId
=
''
;
foreach
(
$category
as
$k
=>
$v
)
{
$arr
[
$k
]
=
$v
;
}
Yii
::
$service
->
category
->
sync
(
$arr
);
}
}
// 得到个数
public
function
actionSynccount
()
{
$count
=
Yii
::
$service
->
category
->
collCount
();
echo
$count
;
}
// 得到个数
public
function
actionSyncpagenum
()
{
$count
=
Yii
::
$service
->
category
->
collCount
();
echo
ceil
(
$count
/
$this
->
numPerPage
);
}
}
app/console/modules/Product/controllers/MysqldatatomongoController.php
0 → 100644
浏览文件 @
29e7bae3
<?php
/**
* FecShop file.
*
* @link http://www.fecshop.com/
* @copyright Copyright (c) 2016 FecShop Software LLC
* @license http://www.fecshop.com/license/
*/
namespace
fecshop\app\console\modules\Product\controllers
;
use
Yii
;
use
yii\console\Controller
;
/**
* @author Terry Zhao <2358269014@qq.com>
* @since 1.0
*/
class
MysqldatatomongoController
extends
Controller
{
public
$numPerPage
=
10
;
public
function
init
()
{
Yii
::
$service
->
product
->
changeToMysqlStorage
();
parent
::
init
();
}
/**
* 1.为什么要同步?
* 对于fecshop的产品数据,是放到mongodb中的,而库存的操作,和订单一起是有事务性的
* 因此,产品库存放到了mysql的表中,这是产品的真实库存数据
* 而对于mongodb中,也有一个库存字段,这个字段是为了在分类页面排序,以及后台进行库存排序,过滤等等(mysql无法和mongodb的表进行join操作,另外join操作对内存的开销大,因此用mongodb中的库存字段进行这些查询排序操作)
* 另外,在订单生成的时候,mongodb的库存字段是不扣除的。
* mongodb的库存只是用来一些范围查询搜索,而对于获取产品库存用于下单等操作,请使用mysql表的库存。
* 2.同步那些数据
* 2.1将mysql表 product_flat_qty 的库存数据,同步到 mongodb product_flat表的qty字段
*/
public
function
actionSync
(
$pageNum
=
1
)
{
$filter
=
[
'numPerPage'
=>
$this
->
numPerPage
,
'pageNum'
=>
$pageNum
,
'orderBy'
=>
[
'id'
=>
SORT_ASC
],
'asArray'
=>
false
,
];
$data
=
Yii
::
$service
->
product
->
coll
(
$filter
);
$coll
=
$data
[
'coll'
];
// 得到分类信息
$productPrimaryKey
=
Yii
::
$service
->
product
->
getPrimaryKey
();
foreach
(
$coll
as
$k
=>
$product
)
{
$product_id
=
$product
[
$productPrimaryKey
];
$categoryIds
=
Yii
::
$service
->
product
->
getCategoryIdsByProductId
(
$product_id
);
$coll
[
$k
][
'category'
]
=
is_array
(
$categoryIds
)
?
$categoryIds
:
[];
}
// 切换mongodb storage
Yii
::
$service
->
product
->
changeToMongoStorage
();
foreach
(
$coll
as
$product
)
{
$arr
=
[];
foreach
(
$product
as
$k
=>
$v
)
{
$arr
[
$k
]
=
$v
;
}
Yii
::
$service
->
product
->
sync
(
$arr
);
}
}
// 得到个数
public
function
actionSynccount
()
{
$count
=
Yii
::
$service
->
product
->
collCount
();
echo
$count
;
}
// 得到个数
public
function
actionSyncpagenum
()
{
$count
=
Yii
::
$service
->
product
->
collCount
();
echo
ceil
(
$count
/
$this
->
numPerPage
);
}
}
shell/product/syncCategoryAndProducMysqlDataToMongo.sh
0 → 100644
浏览文件 @
29e7bae3
#!/bin/sh
# 1.if you want sync Mysql product and category data to Mongodb storage, you can run this script
# 2.this script do not delete origin category and product data, It only adds data on the original basis
# 3.sync product and category data, url rewrite table data Will be overwritten
#
Cur_Dir
=
$(
cd
`
dirname
$0
`
;
pwd
)
# get category all count.
count
=
`
$Cur_Dir
/../../../../../yii category/mysqldatatomongo/synccount
`
pagenum
=
`
$Cur_Dir
/../../../../../yii category/mysqldatatomongo/syncpagenum
`
echo
"There are
$count
categorys to process"
echo
"There are
$pagenum
pages to process"
echo
"##############ALL BEGINING###############"
;
for
((
i
=
1
;
i<
=
$pagenum
;
i++
))
do
$Cur_Dir
/../../../../../yii category/mysqldatatomongo/sync
$i
echo
"Page
$i
done"
done
# set category parent_id by origin_mongo_id and origin_mongo_parent_id
echo
"There are
$count
categorys to process"
echo
"There are
$pagenum
pages to process"
echo
"##############ALL BEGINING###############"
;
for
((
i
=
1
;
i<
=
$pagenum
;
i++
))
do
$Cur_Dir
/../../../../../yii category/mysqldatatomongo/initparentid
$i
echo
"Page
$i
done"
done
# get product all count.
count
=
`
$Cur_Dir
/../../../../../yii product/mysqldatatomongo/synccount
`
pagenum
=
`
$Cur_Dir
/../../../../../yii product/mysqldatatomongo/syncpagenum
`
echo
"There are
$count
products to process"
echo
"There are
$pagenum
pages to process"
echo
"##############ALL BEGINING###############"
;
for
((
i
=
1
;
i<
=
$pagenum
;
i++
))
do
$Cur_Dir
/../../../../../yii product/mysqldatatomongo/sync
$i
echo
"Page
$i
done"
done
###### 1.Sync Section End
echo
"##############ALL COMPLETE###############"
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录