earc/data-primary-key-generator

eArc - 显式架构框架 - 数据主键生成组件

0.0 2021-04-07 20:08 UTC

This package is auto-updated.

Last update: 2024-09-08 03:36:27 UTC


README

earc/data抽象的主键生成器。

目录

安装

使用composer安装earc/data-primary-key-generator库。

$ composer require earc/data-primary-key-generator

基本用法

初始化主键生成器

在您的index.php、bootstrap或配置脚本中初始化earc/data抽象。

use eArc\Data\Initializer;

Initializer::init();

然后注册earc/data-primary-key-generator到earc/data的onAutoPrimaryKey事件。

use eArc\Data\ParameterInterface;
use eArc\DataPrimaryKeyGenerator\PrimaryKeyGenerator;

di_tag(ParameterInterface::TAG_ON_AUTO_PRIMARY_KEY, PrimaryKeyGenerator::class);

现在earc/data已经准备好使用earc/data-primary-key-generator为您的实体生成UUID作为主键。

如果您想生成递增主键,您必须决定在哪里缓存实体类的最大键。您可以选择文件系统或Redis服务器。

使用Redis服务器

要使用Redis服务器,将基础设施参数设置为USE_REDIS

use eArc\DataPrimaryKeyGenerator\ParameterInterface;
use eArc\DataPrimaryKeyGenerator\PrimaryKeyGenerator;

di_set_param(ParameterInterface::INFRASTRUCTURE, PrimaryKeyGenerator::USE_REDIS);

默认情况下,earc/data-primary-key-generator使用localhost和php-redis扩展的默认值。您可以覆盖这些默认值

use eArc\DataPrimaryKeyGenerator\ParameterInterface;

di_set_param(ParameterInterface::REDIS_CONNECTION, ['127.0.0.1', 6379]);

此数组作为参数传递给Redis::connect()方法。有关有效值和配置选项,请参阅phpredis文档

现在earc/data已经准备好使用earc/data-primary-key-generator为您的实体生成递增主键。

使用文件系统

要使用文件系统,将基础设施参数设置为USE_FILESYSTEM

use eArc\DataPrimaryKeyGenerator\ParameterInterface;
use eArc\DataPrimaryKeyGenerator\PrimaryKeyGenerator;

di_set_param(ParameterInterface::INFRASTRUCTURE, PrimaryKeyGenerator::USE_FILESYSTEM);

然后配置earc/data-filesystem桥接器的数据文件系统路径。

use eArc\DataFilesystem\ParameterInterface;

di_set_param(ParameterInterface::DATA_PATH, '/path/to/save/the/entity/data');

现在earc/data已经准备好使用earc/data-primary-key-generator为您的实体生成递增主键。

确定键生成策略

支持两种主键生成策略。

  1. 使用UUIDs
  2. 为每个实体类递增一个正整数

每种策略都有其优缺点

  1. UUIDs是全球唯一的。
  2. 递增整数键需要的空间较少,并且给实体提供了自然顺序,但此策略需要一个基础设施来缓存类的最大主键。

可以在实体类中分别通过实现AutoincrementPrimaryKeyInterfaceAutoUUIDPrimaryKeyInterface来确定键生成策略。

use eArc\Data\Entity\AbstractEntity;
use eArc\DataPrimaryKeyGenerator\AutoincrementPrimaryKeyInterface;
use eArc\DataPrimaryKeyGenerator\AutoUUIDPrimaryKeyInterface;

class MyEntityUUID extends AbstractEntity implements AutoUUIDPrimaryKeyInterface
{
    public function setPrimaryKey(?string $primaryKey): void
    {
        $this->primaryKey = $primaryKey;
    }
}

class MyEntityAutoincrementPK extends AbstractEntity implements AutoincrementPrimaryKeyInterface
{
    public function setPrimaryKey(?string $primaryKey): void
    {
        $this->primaryKey = $primaryKey;
    }
}

或者可以通过设置DEFAULT_INTERFACE参数全局确定

use eArc\DataPrimaryKeyGenerator\AutoincrementPrimaryKeyInterface;
use eArc\DataPrimaryKeyGenerator\ParameterInterface;

di_set_param(ParameterInterface::DEFAULT_INTERFACE, AutoincrementPrimaryKeyInterface::class);

这提供了一个回退,如果没有接口存在。当然,earc/data库的AutoPrimaryKeyInterface必须实现以触发onAutoPrimaryKey事件。

use eArc\Data\Entity\AbstractEntity;
use eArc\Data\Entity\Interfaces\PrimaryKey\AutoPrimaryKeyInterface;

class MyEntityAutoincrementPK extends AbstractEntity implements AutoPrimaryKeyInterface
{
    public function setPrimaryKey(?string $primaryKey): void
    {
        $this->primaryKey = $primaryKey;
    }
}

高级用法

Redis哈希键的命名

如果您与Redis服务器一起使用递增策略,earc/data-primary-key-generator使用redis哈希来缓存实体类的最大键。默认情况下,哈希键命名为earc-data-pk-gen。如果您需要其他名称来管理Redis命名空间,您可以覆盖默认值

use eArc\DataPrimaryKeyGenerator\ParameterInterface;

di_set_param(ParameterInterface::HASH_KEY_NAME, 'my-hash-key-name');

文件系统目录的命名

如果您与文件系统一起使用递增策略,earc/data-primary-key-generator使用@earc-data-pk-gen后缀扩展earc/data-filesystem的文件系统实体路径以缓存实体类的最大主键。您可以通过设置DIR_NAME_POSTFIX参数来更改此值。

use eArc\DataPrimaryKeyGenerator\ParameterInterface;

di_set_param(ParameterInterface::DIR_NAME_POSTFIX, '@my-dir-name-postfix');

版本发布

版本 0.0

  • 第一个官方版本
  • PHP ^8.0