Php Yii多个表的一个关系
我正在尝试编写一个使用多个表的自定义关系,该关系需要使用第一个表中的键连接到其他表 每个表都有相同的列 那么,让故事开始吧: 我正在开发一款基于策略的在线游戏。(PBBG-基于浏览器的持久性游戏) 我有一个大的表(30000.000行),我将该表拆分为100个较小的表(每个表中30000行) 行动发生在村庄内 村庄的详细信息存储在Php Yii多个表的一个关系,php,yii,Php,Yii,我正在尝试编写一个使用多个表的自定义关系,该关系需要使用第一个表中的键连接到其他表 每个表都有相同的列 那么,让故事开始吧: 我正在开发一款基于策略的在线游戏。(PBBG-基于浏览器的持久性游戏) 我有一个大的表(30000.000行),我将该表拆分为100个较小的表(每个表中30000行) 行动发生在村庄内 村庄的详细信息存储在村庄表中 每个村庄都位于一个大陆内,因此有一个k编号,可以告诉我该村庄所属的大陆 村庄表具有以下列: id-p.k。 x-x在地图上的位置 y-y在地图上的位置 k-f
村庄
表中
每个村庄都位于一个大陆内,因此有一个k
编号,可以告诉我该村庄所属的大陆
村庄表具有以下列:
id-p.k。
x-x在地图上的位置
y-y在地图上的位置
k-f.k.大陆id
名称
用户id f.k。
要点
我有100个大洲,这就是为什么我有100个新的小桌子
我也有一个表格,在那里我存储了所有建筑物的详细信息
建筑详细信息存储在村庄建筑
表中
因此,从原始表村庄建筑
我现在有村庄建筑
,村庄建筑
,…,村庄建筑
village\u building\u k…
表格包含以下列:
id-p.k。
乡村标识-f.k。
建筑标识-f.k
现在,我正在尝试编写一个从模型village
跳到模型village\u building\u kX
的关系,其中X
应该在需要时更改
如果我可以使用modelvillage
中的k
值,这将为我提供需要加入的表的名称
如果k=2,我需要使用concat从村庄
跳到村庄_建筑_k2
public function tableName() {
return 'village_building_k' . self::$k;
}
public function relations() {
return array(
'relation_village_building' => array(self::HAS_MANY, 'VillageBuildingKXSlaveM', 'village_id'),
);
}
$model\u village->relationship\u village\u building->building\u id
您确定需要在框架级别解决此问题吗?我建议在这里使用类似于的东西,实际上您可以尝试从一些全局参数(例如从会话)传递db名称
public function tableName()
{
return 'village_building_k' . Yii::app()->session['table'];
}
问题是要为您的玩家长时间保存会话。如果你有很多用户,这将成为一个问题
如果您有几个具有相同结构的表,那么您的数据库体系结构可能是错误的。如果是切分,你需要为此更改AR
yii和sharding中的主要问题是_construct()中的AR调用getMetaData()来获取表模式,所以您需要该级别的表名
在论坛上搜索解决方案,我个人并没有找到关于英语的好文章。下面是一篇关于使用Yii和Redis实现水平切分的文章。俄语节目,但你至少可以看一些代码
30.000.000表也可以,如果您能正确使用它,即使在mysql中也是如此。我认为您需要添加一些共享数据库。由于你的数据库很大,你不能用你的框架来管理它。只需尝试使用共享数据库来管理数据库。您还可以尝试使用mysql群集来管理数据库和
这可能对你有帮助。请记住,一个框架是一组函数,因此您可以使用代码和支持环境(如数据库等)来操作您的函数。30 mils,并且由于扩展而不断增加;会涨到50英里。没关系。这个表中没有大数据,所以你可以索引它,它会很快。再看看分区,实际上您所做的是分区,而不是分片。此功能存在于mysql(或您使用的内容)中。只要在你的桌子上为你所有的大陆做100个分区。在1或2个分区范围内进行选择将非常快,但要避免从大量分区中进行选择。创建索引后,测试选择的速度,其中一些会降低您的速度。避免连接、分组、大量或类似运算符的操作,或者更多。此外,您还需要将AR更改为DAO,这样可以更快、更少地消耗内存。如果使用AR-rewrite选择COUNT(*)查询,或为dataProvider设置totalItemCount(例如,使用explain for full table)。避免使用索引进行批量插入/删除。有了这个你应该会没事的,我的数据库已经增长到200 mil了,没关系。我有不同的情况,只是在去年12月测试了select,select的极限值为0.0630,计数~相同。1.2mil结果。是的,mysql中有3亿多行,一切都很好。我会考虑只保留一个表,并在可能的情况下进行大量缓存。