- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 PostgreSQL 8.4 中使用 Rails 3.1。让我们假设我想要/需要使用 GUID 主键。一个潜在的缺点是索引碎片。在 MS SQL 中,推荐的解决方案是使用特殊的顺序 GUID。一 approach顺序 GUID 是组合 GUID,它用 6 字节时间戳替换 GUID 末尾的 MAC 地址部分。这有一些主流采用:COMB 在 NHibernate ( NHibernate/Id/GuidCombGenerator.cs ) 中本地可用。
我想我已经想出了如何在 Rails 中创建 COMB GUID(在 UUIDTools 2.1.2 gem 的帮助下),但它留下了一些悬而未决的问题:
create_contacts.rb
移民
class CreateContacts < ActiveRecord::Migration
def up
create_table :contacts, :id => false do |t|
t.column :id, :uuid, :null => false # manually create :id with underlying DB type UUID
t.string :first_name
t.string :last_name
t.string :email
t.timestamps
end
execute "ALTER TABLE contacts ADD PRIMARY KEY (id);"
end
# Can't use reversible migration because it will try to run 'execute' again
def down
drop_table :contacts # also drops primary key
end
end
/app/models/contact.rb
class Contact < ActiveRecord::Base
require 'uuid_helper' #rails 3 does not autoload from lib/*
include UUIDHelper
set_primary_key :id
end
/lib/uuid_tools.rb
require 'uuidtools'
module UUIDHelper
def self.included(base)
base.class_eval do
include InstanceMethods
attr_readonly :id # writable only on a new record
before_create :set_uuid
end
end
module InstanceMethods
private
def set_uuid
# MS SQL syntax: CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)
# Get current Time object
utc_timestamp = Time.now.utc
# Convert to integer with milliseconds: (Seconds since Epoch * 1000) + (6-digit microsecond fraction / 1000)
utc_timestamp_with_ms_int = (utc_timestamp.tv_sec * 1000) + (utc_timestamp.tv_usec / 1000)
# Format as hex, minimum of 12 digits, with leading zero. Note that 12 hex digits handles to year 10889 (*).
utc_timestamp_with_ms_hexstring = "%012x" % utc_timestamp_with_ms_int
# If we supply UUIDTOOLS with a MAC address, it will use that rather than retrieving from system.
# Use a regular expression to split into array, then insert ":" characters so it "looks" like a MAC address.
UUIDTools::UUID.mac_address = (utc_timestamp_with_ms_hexstring.scan /.{2}/).join(":")
# Generate Version 1 UUID (see RFC 4122).
comb_guid = UUIDTools::UUID.timestamp_create().to_s
# Assign generted COMBination GUID to .id
self.id = comb_guid
# (*) A note on maximum time handled by 6-byte timestamp that includes milliseconds:
# If utc_timestamp_with_ms_hexstring = "FFFFFFFFFFFF" (12 F's), then
# Time.at(Float(utc_timestamp_with_ms_hexstring.hex)/1000).utc.iso8601(10) = "10889-08-02T05:31:50.6550292968Z".
end
end
end
最佳答案
- Does PostgreSQL suffer from index fragmentation when the PRIMARY KEY is type UUID?
- Is fragmentation avoided if the low-order 6 bytes of the GUID are sequential?
- Is the COMB GUID as implemented below an acceptable, reliable way to create sequential GUIDs in Rails?
import uuid, time
def uuid1_comb(obj):
return uuid.uuid1(node=int(time.time() * 1000))
node
是标识硬件地址的 48 位正整数。
关于ruby-on-rails - 如果我使用 GUID 作为主键,那么使用 Rails 3.1 的 COMB GUID 是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747145/
有人可以解释为什么这不相等吗? import scipy import math sum(math.comb(250, i) for i in range(0, 251)) == sum(scipy.
Jimmy Nilsson 讨论他的 COMB guid 概念 here 。这个概念在 NHibernate 和其他圈子中很流行,因为它比标准 GUID 的性能值(value)通常要随机得多。 但是,
现在是否可以确定 scipy.misc.comb 确实比 ad-hoc 实现更快? 根据旧答案,Statistics: combinations in Python , 这个自制函数在计算组合时比 s
我想提取28_2820201112122420516_000000中的行键(这里是bcp_startSoc),列名(这里是64.0)和值(这里是$str),其中$str是HBase中的一行: # `m
有没有办法使用 CodeFirst 设计为新的 Entity Framework 4.1 中的对象实现 Guid COMB 身份策略?我认为设置 StoreGeneratePattern 会起作用,但
#ImportError: cannot import name 'comb' import scipy from scipy.misc import comb # Loading the vecto
有什么方法可以使用 CodeFirst 设计在新的 Entity Framework 4.1 中为对象实现 Guid COMB 身份策略?我认为设置 StoreGeneratedPattern 会起作
是否可以使用 guid.comb 策略通过使用 Nhibernate 的 Mysql Db 进行身份生成? 当我使用它时 mapping.Id(x => x.Id) .Colum
我正在完成一个项目欧拉问题,但是对于任何超过 40 的值,此函数都会返回无穷大。 from scipy.special import comb def B(x): product = 1
我正在尝试这样做: from sklearn.model_selection import train_test_split 并得到一个错误: In [31]: from sklearn.model_
我正在尝试修复我的 gulp-ccs-comb 任务,但出现此错误: MacBook-Pro:myProject remy$ gulp sass-comb [11:23:10] Using gulpf
我正在将数据库从 Microsoft SQL Server 迁移到 MySQL/MariaDB。在 MSSQL 上,数据库对所有主键使用 uniqueidentifier (GUID) 数据类型。 N
Perl 6 中的 comb 就像是 split 的补充。您不是选择从结果中排除的内容,而是选择包含的内容。是否有 Python 等价物,如果有,它是什么? 到目前为止,我对“Python comb”
scipy.special.binom 和 scipy.misc.comb 有什么区别? 在 ipython 中,我可以看到它们返回不同的类型并且具有不同的准确性。 scipy.special.bin
我正在尝试在 Sublime Text 3 中使用 CSS 和 Sass 文件找到我的完美工作流程。我需要的是: Sass 文件语法高亮显示 CSS Comb 在保存时按字母顺序排列属性 属性和值提示
我想在 pre-honeycomb 设备上设计 Action bar UI。在我谷歌之后,我得到了 ActionBarSherlock 库。我可以在不使用此 ActionbarSherlock 库的情
在android应用中,在android Manifest文件中给coreApp="true"有什么用? 为什么在 Honey Comb 之前不需要它? 它如何帮助提高性能? 最佳答案 添加仅启动“核
对于如何将 React Router 的 history.push('/route') 与 Redux 结合使用,我有点一头雾水。 换句话说,如果你用 Redux 的 mapDispatchToPro
我正在研究 Google Collab 中的特征选择和分类问题。我能够使用 numpy 版本 1.11.3 执行该程序。不幸的是,今天我在使用 numpy(1.13.3) 时遇到了一个错误,因为 sc
我在 PostgreSQL 8.4 中使用 Rails 3.1。让我们假设我想要/需要使用 GUID 主键。一个潜在的缺点是索引碎片。在 MS SQL 中,推荐的解决方案是使用特殊的顺序 GUID。一
我是一名优秀的程序员,十分优秀!