【问题标题】:Using mysql as nosql using memcached - Table not updating使用 mysql 作为 nosql 使用 memcached - 表未更新
【发布时间】:2015-11-04 12:01:41
【问题描述】:

我是在 mysql 中使用 nosql 的新手

我已经安装并启用了 memcahed 界面,然后按照以下步骤操作:

-创建了一个新表'users'

mysql> CREATE TABLE test.users (
  `user_id` varchar(32) NOT NULL DEFAULT '',
  `first` varchar(100) DEFAULT NULL,
  `last` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB

-将其添加到容器表中。

mysql> INSERT INTO containers 
(name, db_schema, db_table, key_columns,
value_columns, unique_idx_name_on_key)
VALUES ('default', 'test', 'users', 'user_id', 'first|last', 'PRIMARY');

mysql> select * from innodb_memcache.containers;
+---------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| name    | db_schema | db_table  | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |
+---------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
| aaa     | test      | demo_test | c1          | c2            | c3    | c4         | c5                 | PRIMARY                |
| default | test      | users     | user_id     | first|last    | 0     | NULL       | NULL               | PRIMARY                |
+---------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+
2 rows in set (0.00 sec)

-使用 telnet 启动界面并运行以下命令将值存储到表中。

set foo 0 0 14
Jarvis|Badgley

-现在 get foo 给出存储的结果

get foo
VALUE foo 0 14
Jarvis|Badgley
END

- 但是当我检查 mysql 表时,这些值没有被存储。

mysql> select * from test.users;
Empty set (0.00 sec)

我不明白为什么更新的值没有反映在表格中。

请帮忙!

【问题讨论】:

  • 如何将mysql连接到memcached,反之亦然?
  • 我已经安装了mysql插件daemon_memcached INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so'; 然后使用telnet启动了memcached接口

标签: mysql memcached nosql


【解决方案1】:

按照您的步骤,我已经能够使其工作,但进行了一些修复。

首先,用户表定义错误(`id`列不存在)。应该是:

CREATE TABLE test.users (
  `user_id` varchar(32) NOT NULL DEFAULT '',
  `first` varchar(100) DEFAULT NULL,
  `last` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB

如果你配置这个表:

INSERT INTO containers 
(name, db_schema, db_table, key_columns,
value_columns, unique_idx_name_on_key)
VALUES ('default', 'test', 'users', 'user_id', 'first|last', 'PRIMARY');

INSTALL PLUGIN daemon_memcached soname "libmemcached.so";启动引擎,你会在mysql.log文件中发现这个错误:

InnoDB_Memcached: column 6 in the entry for config table 'containers' in database 'innodb_memcache' has an invalid NULL value
Failed to initialize instance. Error code: 13

所以你应该为flagscasexpiry定义列,这样:

CREATE TABLE test.users (
  `user_id` varchar(32) NOT NULL DEFAULT '',
  `first` varchar(100) DEFAULT NULL,
  `last` varchar(100) DEFAULT NULL,
  flags int,
  cas bigint unsigned,
  expiry int,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB;

INSERT INTO innodb_memcache.containers 
(name, db_schema, db_table, key_columns,
value_columns, flags, cas_column, expire_time_column, unique_idx_name_on_key)
VALUES ('default', 'test', 'users', 'user_id', 'first|last', 'flags', 'cas', 'expiry', 'PRIMARY');

然后,当您重新启用插件时,它将开始工作。

telnet localhost 11222
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set key 0 3600 8
John|Doe
STORED

并查询数据库:

mysql> select * from test.users;
+---------+-------+------+-------+------+------------+
| user_id | first | last | flags | cas  | expiry     |
+---------+-------+------+-------+------+------------+
| key     | John  | Doe  |     0 |   50 | 1495534750 |
+---------+-------+------+-------+------+------------+
1 row in set (0.00 sec)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多