当前位置: 首页 > news >正文

做图表用的网站欧美风格外贸网站建设

做图表用的网站,欧美风格外贸网站建设,临城网络营销怎么做,o2o网站咋建设ObjectID介绍 MongoDB中的ObjectId是一种特殊的12字节 BSON 类型数据#xff0c;用于为主文档提供唯一的标识符#xff0c;默认情况下作为 _id 字段的默认值出现在每一个MongoDB集合中的文档中。以下是ObjectId的具体组成#xff1a; 1. 时间戳#xff08;Timestamp… ObjectID介绍 MongoDB中的ObjectId是一种特殊的12字节 BSON 类型数据用于为主文档提供唯一的标识符默认情况下作为 _id 字段的默认值出现在每一个MongoDB集合中的文档中。以下是ObjectId的具体组成 1. 时间戳Timestamp 前4个字节32位表示创建该ObjectId时的Unix时间戳精确到秒从1970年1月1日UTC时间零点开始计算这使得ObjectId具有一定程度的时间有序性。 2. 机器标识符Machine ID 接下来的3个字节24位代表了生成此ObjectId的机器主机的唯一标识符。这个标识符通常是基于主机的网络接口地址哈希得到的目的是确保不同主机生成的ObjectId是不同的。 3. 进程标识符PID 旧版描述中提到的是进程ID但在MongoDB较新版本中已不再使用在某些早期的描述中提及2个字节代表进程ID不过实际上MongoDB并不使用进程ID来生成ObjectId以避免因为PID重用导致的冲突。现在这部分数据通常用于其他目的以保证全局唯一性。 4. 计数器Counter 最后的3个字节24位是一个自增计数器在同一台机器同一秒内生成的ObjectId会通过这个计数器递增来确保唯一性。计数器在一个秒内是从一个随机数开始递增的这样即使在同一秒内创建多个ObjectId也能保证在单机上的唯一性。 因此ObjectId的设计可以确保在分布式的环境下每个文档都能拥有一个全局唯一的标识符同时也包含了时间信息这对于很多应用场景来说非常有用比如排序、索引和逻辑处理。 ObjectID使用 分布式系统需要全局唯一ID且有序的可以考虑ObjectID。 UUID太长了且是无序的。感觉不太好ObjectID算是个还可以的选择。当然还有很多其它方案。 Go项目在Mongodb的驱动包里有一个文件是objectid.go有写好ObjectID生成算法。如果项目只要一个算法没必要引入完整的包可以直接把这个文件拷贝出来。 内容如下 package hobjectidimport (crypto/randencodingencoding/binaryencoding/hexencoding/jsonerrorsfmtiosync/atomictime )// 代码来自 https://github.com/mongodb/mongo-go-driver/blob/v1/bson/primitive/objectid.go// ErrInvalidHex indicates that a hex string cannot be converted to an ObjectID. var ErrInvalidHex errors.New(the provided hex string is not a valid ObjectID)// ObjectID is the BSON ObjectID type. type ObjectID [12]byte// NilObjectID is the zero value for ObjectID. var NilObjectID ObjectIDvar objectIDCounter readRandomUint32() var processUnique processUniqueBytes()var _ encoding.TextMarshaler ObjectID{} var _ encoding.TextUnmarshaler ObjectID{}// NewObjectID generates a new ObjectID. func NewObjectID() ObjectID {return NewObjectIDFromTimestamp(time.Now()) }// NewObjectIDFromTimestamp generates a new ObjectID based on the given time. func NewObjectIDFromTimestamp(timestamp time.Time) ObjectID {var b [12]bytebinary.BigEndian.PutUint32(b[0:4], uint32(timestamp.Unix()))copy(b[4:9], processUnique[:])putUint24(b[9:12], atomic.AddUint32(objectIDCounter, 1))return b }// Timestamp extracts the time part of the ObjectId. func (id ObjectID) Timestamp() time.Time {unixSecs : binary.BigEndian.Uint32(id[0:4])return time.Unix(int64(unixSecs), 0).UTC() }// Hex returns the hex encoding of the ObjectID as a string. func (id ObjectID) Hex() string {var buf [24]bytehex.Encode(buf[:], id[:])return string(buf[:]) }func (id ObjectID) String() string {return fmt.Sprintf(ObjectID(%q), id.Hex()) }// IsZero returns true if id is the empty ObjectID. func (id ObjectID) IsZero() bool {return id NilObjectID }// ObjectIDFromHex creates a new ObjectID from a hex string. It returns an error if the hex string is not a // valid ObjectID. func ObjectIDFromHex(s string) (ObjectID, error) {if len(s) ! 24 {return NilObjectID, ErrInvalidHex}var oid [12]byte_, err : hex.Decode(oid[:], []byte(s))if err ! nil {return NilObjectID, err}return oid, nil }// IsValidObjectID returns true if the provided hex string represents a valid ObjectID and false if not. // // Deprecated: Use ObjectIDFromHex and check the error instead. func IsValidObjectID(s string) bool {_, err : ObjectIDFromHex(s)return err nil }// MarshalText returns the ObjectID as UTF-8-encoded text. Implementing this allows us to use ObjectID // as a map key when marshalling JSON. See https://pkg.go.dev/encoding#TextMarshaler func (id ObjectID) MarshalText() ([]byte, error) {return []byte(id.Hex()), nil }// UnmarshalText populates the byte slice with the ObjectID. Implementing this allows us to use ObjectID // as a map key when unmarshalling JSON. See https://pkg.go.dev/encoding#TextUnmarshaler func (id *ObjectID) UnmarshalText(b []byte) error {oid, err : ObjectIDFromHex(string(b))if err ! nil {return err}*id oidreturn nil }// MarshalJSON returns the ObjectID as a string func (id ObjectID) MarshalJSON() ([]byte, error) {return json.Marshal(id.Hex()) }// UnmarshalJSON populates the byte slice with the ObjectID. If the byte slice is 24 bytes long, it // will be populated with the hex representation of the ObjectID. If the byte slice is twelve bytes // long, it will be populated with the BSON representation of the ObjectID. This method also accepts empty strings and // decodes them as NilObjectID. For any other inputs, an error will be returned. func (id *ObjectID) UnmarshalJSON(b []byte) error {// Ignore null to keep parity with the standard library. Decoding a JSON null into a non-pointer ObjectID field// will leave the field unchanged. For pointer values, encoding/json will set the pointer to nil and will not// enter the UnmarshalJSON hook.if string(b) null {return nil}var err errorswitch len(b) {case 12:copy(id[:], b)default:// Extended JSONvar res interface{}err : json.Unmarshal(b, res)if err ! nil {return err}str, ok : res.(string)if !ok {m, ok : res.(map[string]interface{})if !ok {return errors.New(not an extended JSON ObjectID)}oid, ok : m[$oid]if !ok {return errors.New(not an extended JSON ObjectID)}str, ok oid.(string)if !ok {return errors.New(not an extended JSON ObjectID)}}// An empty string is not a valid ObjectID, but we treat it as a special value that decodes as NilObjectID.if len(str) 0 {copy(id[:], NilObjectID[:])return nil}if len(str) ! 24 {return fmt.Errorf(cannot unmarshal into an ObjectID, the length must be 24 but it is %d, len(str))}_, err hex.Decode(id[:], []byte(str))if err ! nil {return err}}return err }func processUniqueBytes() [5]byte {var b [5]byte_, err : io.ReadFull(rand.Reader, b[:])if err ! nil {panic(fmt.Errorf(cannot initialize objectid package with crypto.rand.Reader: %w, err))}return b }func readRandomUint32() uint32 {var b [4]byte_, err : io.ReadFull(rand.Reader, b[:])if err ! nil {panic(fmt.Errorf(cannot initialize objectid package with crypto.rand.Reader: %w, err))}return (uint32(b[0]) 0) | (uint32(b[1]) 8) | (uint32(b[2]) 16) | (uint32(b[3]) 24) }func putUint24(b []byte, v uint32) {b[0] byte(v 16)b[1] byte(v 8)b[2] byte(v) }使用生成算法生成的ID 可以与环境无关、业务无关。通用性更好。
http://www.tj-hxxt.cn/news/219874.html

相关文章:

  • 天津南开做网站公司个人如何做网站软件
  • 西安公司网站晋城企业网站建设价格
  • 网站开发需求书模板重庆建设部网站官网
  • 贵阳哪些公司建网站商标可以做网站吗
  • 个人注册网站怎么注册柳州建站
  • 怎么做淘宝链接网站网络服务商官方网站
  • 和百度一样的网站seo上海公司
  • wordpress建设软件下载站dw5做简单的企业网站
  • 电商网站的功能有哪些网络建设解决方案专业公司
  • 手机自助建站免费建站平台wordpress首页自定义缩略图大小
  • 如何增强网站的安全性网站关键字在哪设置
  • 越南网站建设泰州市住房和城乡建设局官方网站
  • 郑州外贸网站建设商家广州网站建设报价表
  • 易企秀怎么做招聘网站超链接电商网站建设需求分析引言
  • 变白网站制作源码长沙数字引擎信息技术有限公司
  • 坑梓网站建设市场保山市建设厅官方网站
  • 工信部备案网站查侧导航网站
  • 我想在阿里巴巴网站开店_怎么做企业如何进行网络推广
  • 信息网站 模板域名申请后怎么使用
  • 英文企业网站模板做网站好的网站建设公司哪家好
  • 黄冈建设局网站关于论文网站开发参考文献
  • 互联国际网站学校网站建设开发
  • dede 网站目录谷歌浏览器下载安装2023最新版
  • wordpress怎么去掉主题的搜索框seo点石论坛
  • 发电机出租技术支持 东莞网站建设小程序官方示例
  • 免费素材哪个网站比较好有哪些网站可以做任务
  • 森马网站建设情况上海工商注册查询网
  • 微网站制作typecho导入wordpress
  • 广州市 网站建设建设简约wordpress
  • 快手等视频网站做推广河北三河建设局网站