Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • 数据库集群

    post by onelong / 2016-5-1 17:48 Sunday [数据库]

    数据库相关的东西,是最近想写的最后一个总结了。说到大数据,数据库集群,都是比较蛋疼的话题。动不动就要用Hadoop,spark,事实上mysql还是可以比较轻松支持起亿级数据的。mongodb在即时通讯上面很流行,因为有它的特殊性,node.js+mongodb是绝配,上次测session的持久化,数据比用redis还快,太神奇了。对于Hadoop,spark其实我没什么可说的,因为没有使用场景,但是更多人建议使用spark,其实Hadoop和spark的使用场景是有差异的,具体可以百度了解一下。对于mysql,之前在群里聊过,一般的架构就是读写分离,多组主从,分库分表,做好监控。数据库常用的方案:主从模式,双主模式,NDB Cluster等。无论是主从还是双主,需要客户端做好负载均衡。NDB Cluster 是个很好的方向但商业案例不多。具体 [https://www.zhihu.com/question/21307639](https://www.zhihu.com/question/21307639) 。目前主从模式,双主模式还是比较简单易行的。通过读写分离,读的瓶颈可以得到缓解,但是写的瓶颈更加明显了,该如何解决写的瓶颈呢?大多数人提出的方案就是分库分表,但是分库分表很可能影响业务逻辑,比较蛋疼。当当开源了一个sharding-jdbc似乎挺好的解决这个问题,但是性能如何呢,我没有时间做测试。还有一个据说很牛逼的mycat,没怎么了解。如果引入cache(redis,memcached)做缓冲的,高并发需要解决很多一致性的问题,这个很心塞。简单写这个,没有什么深入的内容,只是小结一下别人生产环境中可用的方案 ,帮助我们在选择的时候做决定的。具体真的要深入的话,水比较深,交给专业的数据库工程师就好了。

  • c语言操作sqlite3的入门教程

    post by onelong / 2010-7-9 20:13 Friday [数据库]

    linux下c函数库放在/usr/include里面,先去看看那里有没有sqlite3的函数库,如果有既不用装了,没有的就按装一下吧!ubuntu下安装软件是那么的简单,不多说了!
    测试一下先:sqlite.c的源码如下.....
    #include <stdlib.h>
    #include <stdio.h>
    #include "sqlite3.h"

    int main(void)
    {
        sqlite3 *db=NULL;
        char *zErrMsg =0;       
        int rc;
        rc=sqlite3_open("test1.db",&db);
        if(rc)
        {
            fprintf(stderr,"Can't open database: %s\n",sqlite3_errmsg(db));
            sqlite3_close(db);
            exit(1);
        }
        else
            {
                printf("open mydata successfully!\n");
                rc = sqlite3_exec(db, "CREATE TABLE chn_to_eng(chinese QString, english QString)", 0, 0, &zErrMsg);
                char *sql="INSERT INTO [chn_to_eng] ([chinese], [english]) VALUES ('ddd','fgg')";
                rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
            }
        sqlite3_close(db);
        return 0;
    }
    编译使用的命令:gcc sqlite.c -o sqlite -L/full/path/to/directory/with/libsqlite3/ -lsqlite3
            或gcc sqlite.c -o sqlite -lsqlite3
    运行:./sqlite
    这个时候你查看当前目录,会发现多了一个文件test1.db
    编译时要注意的问题 如果只是用:gcc sqlite.c -o sqlite
    会提示错误
    /tmp/ccqqKvmp.o: In function `main':
    sqlite.c:(.text+0x2e): undefined reference to `sqlite3_open'
    sqlite.c:(.text+0x42): undefined reference to `sqlite3_errmsg'
    sqlite.c:(.text+0x67): undefined reference to `sqlite3_close'
    sqlite.c:(.text+0xa9): undefined reference to `sqlite3_exec'
    sqlite.c:(.text+0xdc): undefined reference to `sqlite3_exec'
    sqlite.c:(.text+0xea): undefined reference to `sqlite3_close'
    collect2: ld returned 1 exit status
     

  • ubuntu下安装Sqlite及入门应用

    post by onelong / 2010-7-9 18:06 Friday [数据库]

    在ubuntu下安装Sqlite是十分简单的
    安装数据库系统Sqlite:
        sudo apt-get install sqlite
    安装数据库系统Sqlite3:
        sudo apt-get install sqlite3
    检查数据库安装结果:
        sqlite -version
    这时你会看到sqlite的版本
    同样
        sqlite3 -version
    查到sqlite3的版本
    下面测试一下先;新建数据库或打开test.db;在终端使用如下命令
        sqlite3 test.db
    查看数据库信息
        .database
    查看表
        .tables
    退出sqlite
        .exit或.quit
    默认情况下,test.db文件会在你主目录下的,你看看!
    至于其他的sql语句和平时mysql的没有什么区别 create insert select等我就不多说了
    下面是我的一个演示:
    hl@onelong:~$ sqlite3 test.db
    SQLite version 3.6.22
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> create table hl(one varchar(10),two smallint);

    sqlite> insert into hl values('hello', 10);
    sqlite> insert into hl values('me', 20);
    sqlite> select * from hl;
    hello|10
    me|20
    sqlite> .database
    seq  name             file                                                     
    ---  ---------------  ----------------------------------------------------------
    0    main             /home/hl/test.db                                         
    sqlite> .tables
    hl
    sqlite>