Mysql 嗯

Mysql 嗯,mysql,scalability,Mysql,Scalability,充分披露:我在ParElastic工作。但我真诚地相信,我们的虚拟多租户数据库是解决这一问题的唯一真正完整的解决方案: -每个客户都可以看到自己数据库的一个完整、独立的实例 -独立的数据库管理命令 -可扩展的隐蔽分片,用于在用户之间和用户内部分发数据 -按客户模式管理支持滚动升级和自定义扩展 -使用普通SQL进行安全的跨客户查询 如果您感兴趣,可以在(搜索“ParElastic”)中免费下载预打包的ParElastic环境。或者签出。动态表单是指应用程序将创建表单。那么应用程序能预测表单的数据库

充分披露:我在ParElastic工作。但我真诚地相信,我们的虚拟多租户数据库是解决这一问题的唯一真正完整的解决方案: -每个客户都可以看到自己数据库的一个完整、独立的实例 -独立的数据库管理命令 -可扩展的隐蔽分片,用于在用户之间和用户内部分发数据 -按客户模式管理支持滚动升级和自定义扩展 -使用普通SQL进行安全的跨客户查询


如果您感兴趣,可以在(搜索“ParElastic”)中免费下载预打包的ParElastic环境。或者签出。

动态表单是指应用程序将创建表单。那么应用程序能预测表单的数据库设计吗?两个用户的表单是否相同?每个用户表单是否有公共字段?是的,我们将根据用户创建的表单创建表,用户之间也没有公共字段。增加的问题是,我们必须根据表单中输入的数据向表单所有者显示报表,我相信上述查询将为我提供创建报表所需的垂直数据,我们将在PHP级别编写所有聚合逻辑,或者使用pivot表技术。将数据存储在PHP数组中并显示。这就是数据库应该如何工作。为了创建报告,我们可能会使用mysql的聚合功能,并且在php级别进行一些过滤可能会耗费资源。您认为使用pivot表技术是否可以,即使是一个有100万行的表(我们测试了560000行,创建pivot大约需要10-14秒)或任何alternative@Sudesh我假设您为特定用户的特定形式创建pivoit。因此,有了正确的索引,您就可以仅使用所选表单的提交数据开始pivoit步骤。-如果我理解正确,560000是所有自定义表单中提交的所有字段的数量。你只需要一次提交某个表单的数据,索引可以很快消除其余的记录。是的,我们只需要透视与该表单相关的数据,但是你认为透视比连接好吗(我们的新想法)经过分析后,我想我们会坚持使用一个大表而不是连接,谢谢 ------------------------------ | Key | Value | ------------------------------ | Key1 | Value1 | | Key2 | Value2 | | Key3 | Value3 | | Key4 | Value4 | | Key5 | Value5 | | Key6 | Value6 | | Key7 | Value7 | ------------------------------ CREATE TABLE IF NOT EXISTS `vet` ( `id` int(11) NOT NULL, `form_id` int(11) NOT NULL, `key` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, KEY `id` (`id`), KEY `form_id` (`form_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; SELECT id, GROUP_CONCAT(if(`key` = 'k1', value, NULL)) as 'key1', GROUP_CONCAT(if(`key` = 'k2', value, NULL)) as 'key2', GROUP_CONCAT(if(`key` = 'k3', value, NULL)) as 'key3', GROUP_CONCAT(if(`key` = 'k4', value, NULL)) as 'key4', GROUP_CONCAT(if(`key` = 'k5', value, NULL)) as 'key5', GROUP_CONCAT(if(`key` = 'k6', value, NULL)) as 'key6', GROUP_CONCAT(if(`key` = 'k7', value, NULL)) as 'key7' FROM vet WHERE form_id = 2 GROUP BY id SELECT v.id, v1.value as key1, v2.value as key2, v3.value as key3, v4.value as key4, v5.value as key5, v6.value as key6, v7.value as key7 FROM vet v LEFT JOIN vet v1 ON v1.id = v.id AND v1.`key` = "k1" LEFT JOIN vet v2 ON v2.id = v.id AND v2.`key` = "k2" LEFT JOIN vet v3 ON v3.id = v.id AND v3.`key` = "k3" LEFT JOIN vet v4 ON v4.id = v.id AND v4.`key` = "k4" LEFT JOIN vet v5 ON v5.id = v.id AND v5.`key` = "k5" LEFT JOIN vet v6 ON v6.id = v.id AND v6.`key` = "k6" LEFT JOIN vet v7 ON v7.id = v.id AND v7.`key` = "k7" WHERE v.form_id = 2 GROUP BY v.id select * from FormProperties inner join UserForm on (FormProperties.UserForm_id = UserForm.id) inner join User on (UserForm.User_id = user.id) where UserForm.id = 103