我最近在php和play框架上实现了非常小的cassandra web应用程序来比较这些技术.我在一台有ubuntu-server的虚拟机上运行这些测试.在php和play框架应用程序中,只有一个url可以插入cassandra键空间.
在php中,我运行了以下apache基准测试;
ab -n 100000 -c 100 http://mydomain.com/insert
测试结果显示服务器可以服务120#/ sec(每秒请求数)
我使用netflix的astyanax cassandra库在play框架中创建了几乎相同的应用程序.然而,即使在开始时服务器似乎也很糟糕ab
.
我正在生产中通过play start
终端命令进行游戏框架测试.
所以,我知道play框架已经准备就绪了.那么,我在这里做错了什么?
我想知道这是否:
$column_family->get('row_key', $columns=array('name1', 'name2'));
Run Code Online (Sandbox Code Playgroud)
比我现在使用的更灵活的get更快:
$column_family->get('row_key');
Run Code Online (Sandbox Code Playgroud)
方法1当然难以实现,但它会减少负载/带宽/延迟吗?
可能重复:
如何在PHP上使用64位整数?
是否可以使用64位长整数作为使用PHPCassa的Cassandra中的密钥?
例如,
$pool = new ConnectionPool('main', array("127.0.0.1"));
$table = new ColumnFamily($pool, 'messages'); // ColumnFamily
$table->insert("5601379860409749867", array("sampleKey" => "sampleValue));
Run Code Online (Sandbox Code Playgroud)
每次我执行插入操作时,键都会得到0.在此表中,key_validation_class是LongType.
我最近几天在使用Cassandra.我正在使用PHPCassa库.
当我尝试使用以下代码时,它无法正常工作.
require_once('phpcassa/connection.php');
require_once "phpcassa/columnfamily.php";
// Create new ConnectionPool like you normally would
$pool = new ConnectionPool("newtest");
// Retrieve a raw connection from the ConnectionPool
$raw = $pool->get();
$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE KEY='phpqa'", cassandra_Compression::NONE);
echo "<pre>";
print_r($rows);
echo "<pre>";
// Return the connection to the pool so it may be used by other callers. Otherwise,
// the connection will be unavailable for use.
$pool->return_connection($raw);
unset($raw);
Run Code Online (Sandbox Code Playgroud)
它没有返回,我也尝试过以下查询
$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE age='32'", cassandra_Compression::NONE);
$rows = …
Run Code Online (Sandbox Code Playgroud) 我有一个数据访问类,在实例化上设置三个phpcassa连接池,如下所示:
try {
$this->cache = new ConnectionPool(
BSCACHE_KEYSPACE,
explode(',', BSCACHE_SERVERS),
null, null, null, null, null,
array(
'username' => BSCACHE_USERNAME,
'password' => BSCACHE_PASSWORD
)
);
$this->indexCache = new ConnectionPool(
INDEXCACHE_KEYSPACE,
explode(',', INDEXCACHE_SERVERS),
null, null, null, null, null,
array(
'username' => INDEXCACHE_USERNAME,
'password' => INDEXCACHE_PASSWORD
)
);
$this->metaCache = new ConnectionPool(
METACACHE_KEYSPACE,
explode(',', METACACHE_SERVERS),
null, null, null, null, null,
array(
'username' => METACACHE_USERNAME,
'password' => METACACHE_PASSWORD
)
);
} catch (Exception $e) {
return array($this->error['connection']);
}
我最近在zend的php服务器上使用代码跟踪功能对这个类进行了一点性能审计,并注意到这三个连接池的设置耗费了大约100ms.考虑到每个连接每次实例化只使用一次或两次,这就是输入连接的大量时间.
任何人都知道任何巧妙的技巧可以让我一次构建这些连接池并让它们在类的实例化之间共享?也许有一些简单的方法可以立即发生更高级的PHP开发人员? …
如果我使用 UUID1 作为我的列名,然后用 php 检索它们,我如何将该 UUID 转换为可读字符串,以便我可以将该字符串插入到 HTML 中,然后稍后通过将该字符串转换回 UUID 来使用它来选择同一列? 这甚至可能吗?
我可以使用 UTF8 或其他东西,但我想避免冲突并获得有序的宽行,而且我真的需要将这些列名存储到 HTML 中,我看不到任何其他方法来做到这一点。
我正在使用phpcassa
.
哪一个最适合使用单个密钥空间或Multiple Keyspace来管理数据,假设一个应用程序拥有更多客户端.每个客户端都会发送大量数据,我们将数据存储在时间序列列中.如果我为每个客户端提供单独的密钥空间,那么Cassandra管理数据会不会很好?如果我在我的应用程序中为一个客户端使用一个键空间,有什么优点和缺点?
假设有10个设备(dev01,dev02,dev03..etc).
它以一定的间隔时间发送数据,我们收集这些数据,因此我们的数据模式是
dev01 :int
signalname :string
signaltime :date/time[with YY-MM-DD HHMMSS.mm]
Extradata :String
Run Code Online (Sandbox Code Playgroud)
我想将数据推送到cassandra,哪种方式最好存储这些数据?
我的查询就像,
1需要检索基于设备的当前日期数据,还是某个日期范围?
2 5设备当天数据?
我不确定将数据存储到cassadra中的以下方法是最佳模型
Standard columnfamily Name:signalname
row key :dev01
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
columnname :timeseries(20120801124205)[YYMMDD HHMMSS][next second data]
columnvalue :Json data
row key :dev02
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
columnname :timeseries(20120801124205)[YYMMDD HHMMSS][next second data]
columnvalue :Json data
Or
Super columnfamily :signalname
row key :Clientid1
supercolumnname :dev01
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
supercolumnname :dev02
columnname :timeseries(20120801124204)[YYMMDD HHMMSS]
columnvalue :Json data
row key …
Run Code Online (Sandbox Code Playgroud) 我试图找到一种很好的方法来组织我的行键来对它们执行范围扫描而不创建我自己的索引列表.
我有一个MySQL数据库,目前有大约15.000个数据库,每个~50个表= 75.000个表.因为始终使用唯一标识符读取99%的数据,计划将数据移动到Cassandra集群中.
对于某些维护(列出完整表的内容,删除完整的表或删除数据库),我需要获取完整表甚至数据库的内容.范围扫描似乎是最适合的.
目前我计划为旧结构的每个部分生成UUID,并将它们分开|
(DB + Table + Id = UUID1 | UUID2 | UUID2).
例:
07424eaa-4761-11e1-ac67-12313c033ac4|0619a6ec-4525-11e1-906e-12313c033ac4|0619a6ec-4795-12e9-906e-78313c033ac4
Run Code Online (Sandbox Code Playgroud)
带数据的CF应该用org.apache.cassandra.db.marshal.AsciiType
.
作为客户我使用phpcassa.
对于范围扫描,我想使用UUID|
作为开始键和作为范围的结束,使用相同的键,但使用chr(255)
或z
附加到它.两个字符的ascii值都比该键中跟随的任何其他UUID字符大.
这是一种可靠的方法,可以让我实现范围扫描的解释目标吗?
我有12行的CF. 每行有6列.我试图$ cf-> get_range('pq_questions','','',1200)它获得所有行但速度太慢(约4-6秒)
Column Family: pq_questions
SSTable count: 1
Space used (live): 668363
Space used (total): 668363
Number of Keys (estimate): 1280
Memtable Columns Count: 0
Memtable Data Size: 0
Memtable Switch Count: 0
Read Count: 0
Read Latency: NaN ms.
Write Count: 0
Write Latency: NaN ms.
Pending Tasks: 0
Key cache capacity: 200000
Key cache size: 1000
Key cache hit rate: 0.10998439937597504
Row cache capacity: 1000
Row cache size: 1000
Row cache hit rate: 0.0
Compacted row …
Run Code Online (Sandbox Code Playgroud)