我目前运行一个基于MySQL的网站,用户在每次有人完成广告时都会宣传广告并获得收入.我们会在每次有人观看广告("展示"),每次用户点击添加("点击")以及每次有人完成广告("潜在客户")时进行记录.
由于我们获得了如此多的流量,因此我们在每个相应的表中都有数百万条记录.然后,我们必须查询这些表,以便让用户了解他们已经获得了多少,因此我们最终在一个请求中多次对数百万行的表执行多次查询,同时进行数百次.
我们正在寻求从MySQL迁移到键值存储或类似的东西.我们需要能够存储所有这些数百万行的内容,以毫秒为单位查询它们,最重要的是,使用adhoc查询我们可以查询任何单个列,因此我们可以执行以下操作:
FROM前导WHERE country ='US'和user_id = 501(显然是NoSQL等价物)
FROM点击WHERE ad_id = 1952 AND user_id = 200 AND country ='GB'
等等
有没有人有任何好的建议?我正在考虑使用MongoDB或CouchDB,但我不确定他们是否能够处理每秒多次查询数百万条记录以及我们需要的特殊查询类型.
谢谢!
假设我有一个具有以下规范的函数:
void example(char* str)
Run Code Online (Sandbox Code Playgroud)
如果我传入一个字符串参数,例如:
example("testing");
Run Code Online (Sandbox Code Playgroud)
是"测试"在堆上动态分配的价值,所以我就可以说取得了函数调用"榜样"被破坏的范围后使用它(和需要稍后释放它),或者是本地堆栈上的变量,所以我需要使用malloc创建一个新的字符串,并将值存储在那里,如果我希望它继续存在,比如一个hashmap?
谢谢.
所以我是C的新手,并创建了一些简单的程序来帮助我掌握一些东西.
假设我有一个结构如下:
typedef struct {
char* field;
} something;
Run Code Online (Sandbox Code Playgroud)
我动态地为其中的10个分配空间,如下所示:
something* stuff = calloc(10, sizeof(something));
Run Code Online (Sandbox Code Playgroud)
假设我想删除这些事情中的一个.这样做有意义吗:
free(&stuff[4]);
Run Code Online (Sandbox Code Playgroud)
或者,如果我把所有这些指针都指向某些东西而不是连续的某些块,那么这只会有意义吗?
如果我这样做并且有效,会:
stuff[4] = malloc(sizeof(something))
Run Code Online (Sandbox Code Playgroud)
那么我需要为该索引重新添加"东西"吗?
或者,一般来说,我们通常会处理这样的结构,如内存块,其中包含指向结构的指针,而不是结构本身?
谢谢.
根据用户流量,我的Web应用程序可能最多每秒1-2次运行以下查询:
UPDATE `click_rollups`
SET `clicks` = `clicks` + 1, `last_updated` = ?
WHERE `camp_id` = ?
AND `country` = ?
AND `clicks` < ?
AND `time_created` = ?
Run Code Online (Sandbox Code Playgroud)
我们的日志显示有时会出现此错误:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
Run Code Online (Sandbox Code Playgroud)
但是,click_rollups在该事务的写上下文中仅使用一次,因此我无法想象会发生死锁的方式。仅使用SELECTs 在应用程序中的其他位置仅查询了一次。
因此,这是否意味着来自这两个单独事务(更新和仅选择)的死锁导致了该问题,因为每个单独事务仅使用该表一次(使用该表的查询未引用任何其他表) )?还是可能存在行级锁定问题,这可能意味着其中一个事务可能因同一事务的其他出现而陷入僵局?
我正在创建以下结构指针类型:
typedef struct hashmap_item {
hashmap_item_t prev;
hashmap_item_t next;
char* key;
void* value;
int time_added;
} *hashmap_item_t;
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
hashmap.h:5: error: expected specifier-qualifier-list before "hashmap_item_t"
Run Code Online (Sandbox Code Playgroud)
我假设这是因为我定义的结构包含自己作为一个字段.我怎么能避免这个?有没有办法向前声明结构?
谢谢!