我们正在建设一个新的Web应用程序,将有一个数字,将涉及新的数据插入本地设备的离线的iPad/Android应用版本.因此,我们需要使用UUID来允许与master数据库进行必要的双向同步.为此,我们将UUID存储BINARY(16)为主键.
我在研究之后学到的问题是,非连续主键插入所需的时间会随着时间的推移而增加,并且这些插入会导致碎片化(如此处所述).好处AUTO_INCREMENT是新行通常只会添加到表的末尾,因此不会遇到UUID的速度问题.
我的问题是,使用AUTO_INCREMENT列作为主键,然后将UUID列作为非空唯一索引是否更好?据推测,这将具有顺序插入的速度优势,同时保留同步分布式数据库所需的必要UUID.
我可以看到的一个问题是UUID需要被用作对其他表的引用(使用外键约束)(即附加到检查的问题列表,而检查又连接到站点,所有这些都是参与插入,因此所有这些都需要UUID).在语义上,它使主键为参考更有意义,但由于其分布式系统,我们不能使用AUTO_INCREMENTS这些.对于这些引用(当然JOIN还有它们附带的s ),使用(非空)唯一索引而不是主键是否有缺点?
值得注意的是,主(在线)数据库使用MySQL(InnoDB),分布式(离线)数据库使用SQLite.
编辑:
考虑到将UUID作为主键(因为它在语义上是这样的)可能更好,如果我将UUID设置为主键并将AUTO_INCREMENT列设置为非null唯一索引,我是否会获得顺序插入的好处?或者它只是确定在哪里插入新行时相关的主键?
DROP TABLE IF EXISTS `table`;
CREATE TABLE `table` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`text` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `table` VALUES ('1', 'Unpacked reserved sir offering bed judgment may and quitting speaking. Is do be improved raptures offering required in replying raillery. Stairs ladies friend by in mutual an no. Mr hence chief he cause. Whole no doors on hoped. Mile tell if help they ye full …Run Code Online (Sandbox Code Playgroud) 由于账号注册的一部分,我发送一封电子邮件,以与证明他们的电子邮件地址的存在一次性验证链接的新用户,并自动登录他们,但我注意到,当电子邮件是验证脚本运行打开 - 在点击链接之前.我的假设是我的电子邮件客户端(在这种情况下是Outlook.com)有某种爬虫,它在电子邮件打开时跟随电子邮件中的链接.
假设我是正确的(如果我不是,请指正),并撇开什么是一个潜在的严重侵犯隐私(因为这是题外话这里)有什么我可以做,以阻止这种情况发生?
为了确认它确实是Outlook.com,我检查了用户代理,即Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0(我在Mac上使用Chrome)和远程地址132.245.26.156(由微软拥有).
我试图了解使用权限的最佳方式,据我所知,有两个主要选项.
第一个选项是使用按位运算,为此我将使用以下数据库结构:
用户
user_id | user_permission
---------------------
1 | 15
2 | 1
Run Code Online (Sandbox Code Playgroud)
权限
permission_id | permission_name
-----------------------
1 | Read
2 | Write
4 | Execute
8 | Delete
Run Code Online (Sandbox Code Playgroud)
然后检查用户是否有权限我将使用该操作:
$user_permission & $permission_id
Run Code Online (Sandbox Code Playgroud)
我看到的主要好处是:
我看到的主要缺点是:
BIGINT)第二个选项是使用多对多子表,为此我将使用以下数据库结构:
用户
user_id
-------
1
2
Run Code Online (Sandbox Code Playgroud)
权限
permission_id | permission_name
-----------------------
1 | Read
2 | Write
3 | Execute
4 | Delete
Run Code Online (Sandbox Code Playgroud)
user_permissions
user_id | permission_id
-----------------------
1 | 1
1 | 2
1 | 3 …Run Code Online (Sandbox Code Playgroud) 在Mac上的“日历”中设置事件的位置时,它会提供一些建议,单击这些建议会将地图嵌入到事件中。是否可以将地图嵌入.ics文件中,以便在导入后显示地图?似乎仅LOCATION在创建日历文件时进行设置是不够的。
我已经扫描了RFC 2445,但找不到任何帮助。
我的假设是将地图嵌入事件中,用户需要从键入时提供的建议中特别选择一个位置,并且导入时无法自动完成。我的假设正确吗?
我想要一个像这样的动态属性名称:
$_taxVocabName = 'name';
$node->field_ . $_taxVocabName;
Run Code Online (Sandbox Code Playgroud)
这应该叫:
$node->field_name
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我在php.net或其他地方找不到任何东西.
谢谢Sascha
mysql ×3
php ×3
group-by ×1
group-concat ×1
icalendar ×1
outlook ×1
permissions ×1
rfc5545 ×1
select ×1
sql ×1
sqlite ×1
uuid ×1
web-crawler ×1