doctrine / key-value-store
此包已被弃用,不再维护。未建议替代包。
简单的键值存储抽象层,映射到PHP对象,支持多种后端。
v0.4.0
2019-11-15 18:45 UTC
Requires
- php: ^5.5|^7.0
- doctrine/common: ^2.4
Requires (Dev)
- aws/aws-sdk-php: ^3.8
- datastax/php-driver: ^1.0
- doctrine/couchdb: ^1.0.0-beta4
- mongodb/mongodb: ^1.4
- php-riak/riak-client: ^1.0@alpha
- phpunit/phpunit: ^4.8|^5.0
Suggests
- ext-couchbase: to use the Couchbase storage
- aws/aws-sdk-php: to use the DynamoDB storage
- doctrine/couchdb: to use the CouchDB storage
This package is auto-updated.
Last update: 2024-02-16 03:57:54 UTC
README
在NoSQL世界中,许多实现都过于复杂,这些实现只是键值存储并附加了一些额外功能。Doctrine键值存储项目可以解决这个问题。该项目提供了一个更简单、更轻量级的API,以键值API为中心,用于获取/保存对象。
- 单值或多值主键
- 无结构/无模式的值,这些值映射到对象上
- 根据实现,支持嵌入的值/对象
- 无需复杂的映射,只需在类上添加 @Entity 注解,所有属性都会自动映射,除非有 @Transient 注解。至少有一个属性必须是 @Id。但这也取决于底层供应商。
- 属性不必存在于类中,对于缺失的属性将创建公共属性。
- 不支持对其他对象的引用
- ODM/ORM的事件监听器,允许将键值实体及其集合作为属性进行管理(postLoad、postUpdate、postPersist、postRemove)
- 简化后的对象管理接口
- 数据映射器与其他Doctrine库类似,持久化和数据对象是分离的。
- 继承(单一或多个存储)
实现
以下供应商是目标
- Microsoft Azure Table(已实现)
- Doctrine\Common\Cache提供者(已实现)
- RDBMS(已实现)
- Couchbase(已实现)
- Amazon DynamoDB(已实现)
- CouchDB(已实现)
- Cassandra
- MongoDB(已实现)
- Riak(已实现)
- Redis(已实现)
我们愉快地接受对任何驱动程序的贡献。
示例
假设我们根据活动ID和接收者跟踪电子邮件活动。
<?php use Doctrine\KeyValueStore\Mapping\Annotations as KeyValue; /** * @KeyValue\Entity(storageName="responses") */ class Response { const RECEIVE = 0; const OPEN = 10; const CLICK = 20; const ACTION = 30; /** @KeyValue\Id */ private $campaign; /** @KeyValue\Id */ private $recipient; private $status; private $date; public function __construct($campaign, $recipient, $status) { $this->campaign = $campaign; $this->recipient = $recipient; $this->status = $status; } }
创建
<?php $response = new Response("1234", "[email protected]", Response::RECEIVE); $entityManager->persist($response); //.... persists as much as you can :-) $entityManager->flush();
读取
<?php $response = $entityManager->find("Response",array("campaign" => "1234","recipient" => "[email protected]"));
更新
与创建相同,只需重用相同的ID。
删除
<?php $response = $entityManager->find("Response",array("1234","[email protected]")); $entityManager->remove($response); $entityManager->flush();
配置
目前还没有工厂简化创建过程,以下是需要实例化具有Doctrine缓存后端的关键值实体管理器的完整代码。
<?php use Doctrine\KeyValueStore\EntityManager; use Doctrine\KeyValueStore\Configuration; use Doctrine\KeyValueStore\Mapping\AnnotationDriver; use Doctrine\KeyValueStore\Storage\DoctrineCacheStorage; use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Annotations\AnnotationReader; $cache = new ArrayCache; $storage = new DoctrineCacheStorage($cache); $reader = new AnnotationReader(); $metadata = new AnnotationDriver($reader); $config = new Configuration(); $config->setMappingDriverImpl($metadata); $config->setMetadataCache($cache); $entityManager = new EntityManager($storage, $config);
如果您想使用WindowsAzure Table,可以使用以下配置来实例化存储。
use Doctrine\KeyValueStore\Storage\AzureSdkTableStorage; use WindowsAzure\Common\ServicesBuilder; $connectionString = ""; // Windows Azure Connection string $builder = ServicesBuilder::getInstance(); $client = $builder->createTableService($connectionString); $storage = new AzureSdkTableStorage($client);
如果您想使用Doctrine DBAL作为后端
$params = array(); $tableName = "storage"; $idColumnName = "id"; $dataColumnName = "serialized_data"; $conn = DriverManager::getConnection($params); $storage = new DBALStorage($conn, $tableName, $idColumnName, $dataColumnName);