doctrine2 mysql_php – 使用ZF2和Doctrine2将SQL Server表转换为MySQL

我为我的一个客户开发了一个应用程序.他已经有一个所以我需要将他的实际数据库(SQL Server)转换成新的(

MySQL).

SQL Server的某些表具有超过10.000.000条记录.当我开始开始开发这个转换器时,我已经开始使用几个记录的表,所以我找到所有的记录并保存到我的新的MySQL数据库.我会给你一些代码,以便更好地理解(这只是一个例子)

namespace Converter\Model;

class PostConverter extends AbstractConverter

{

public function convert()

{

// this is the default connection, it is a mysql database (new application)

$em = $this->getEntityManager();

// this return an alternative connection to the sqlserver database (actual application)

$emAlternative = $this->getEntityManagerAlternative();

// instance of Converter\Repository\Post

$repository = $emAlternative->getRepository('Converter\Entity\Post');

$posts = $repository->findAll();

foreach ($posts as $post)

$post = new Post();

$post->setTitle($object->getTitle());

$em->persist($post);

}

$em->flush();

}

}

现在我们假设Post表有超过10.000.000条记录.我不能只是找到所有的并且迭代它.我会离开内存所以我做了这样的事情.

存储库类:

namespace Converter\Repository;

class Posts extends \Doctrine\ORM\EntityRepository

{

public function findPosts($limit, $offset)

{

$qb = $this->createQueryBuilder('Post');

$qb->setMaxResults($limit);

$qb->setFirstResult($offset);

return $qb->getQuery->getResult();

}

}

在这里,我发现只有几个帖子在时间,在while循环.但它有点慢.我找不到更好的解决方案来提高性能

namespace Converter\Model;

class PostConverter extends AbstractConverter

{

public function convert()

{

$em = $this->getEntityManager();

$emAlternative = $this->getEntityManagerAlternative();

$repository = $emAlternative->getRepository('Converter\Entity\Post');

$limit = 1000;

while ($object = $repository->findPosts($limit, $offset) {

$post = new Post();

$post->setTitle($object->getTitle());

$em->persist($post);

$offset += $limit;

}

$em->flush();

}

}

我以前从来没有这样做过.也许我会走错路.我真的很感激,如果有人能告诉我正确的一个,所以我可以继续下去.

谢谢你们

编辑

我不能只是把一个人转给另一个人.我在这里发布的只是一个例子,在转换中,我必须在插入新数据库之前处理几乎所有的数据.他的实际应用是在2005年开发的.数据库甚至没有规范化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值