订单、日志等信息,即使在用户数很少的情况下,数据量也是相当巨大的,如果用单一的一张表来存储,势必导致查询缓慢
如果按月存储,则每个表的数据量都能得到有效的控制,查询速率也会得到数量级的提升
这种需求在 Laravel
里面很容易实现,Symfony2
里面弄起来则有点绕
在存储订单、日志的控制器对应位置写下面的代码,实现自动按月建表:
<?php $em = $this->getDoctrine()->getManager(); $metadata = $em->getClassMetadata('RucheeBlogBundle:Order'); $metadata->setPrimaryTable(['name' => $metadata->getTableName().date('Ym')]); // 动态修改表名 $schemaManager = $this->getDoctrine()->getConnection()->getSchemaManager(); if ($schemaManager->tablesExist([$metadata->getTableName()]) === false) { // 如果该表不存在则执行新建操作 $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($em); $schemaTool->createSchema([$metadata]); }
在获取当月订单、日志的控制器对应位置写下面的代码,实现自动切换表名:
<?php $em = $this->getDoctrine()->getManager(); $metadata = $em->getClassMetadata('RucheeBlogBundle:Order'); $metadata->setPrimaryTable(['name' => $metadata->getTableName().date('Ym')]); // 动态修改表名
切换到指定年月的表:
<?php $em = $this->getDoctrine()->getManager(); $metadata = $em->getClassMetadata('RucheeBlogBundle:Order'); $metadata->setPrimaryTable(['name' => $metadata->getTableName().'201505']); // 切换到指定年月的表