标签: database

Mongodb vs Cassandra用于聚合,搜索和分析许多日志

我正在开发一个项目,将日志聚合和分析作为更大项目的一部分.我不知道选择哪个数据库来处理这些日志.最近我在MongoDB和Cassandra之间来回走动,但我确信还有其他一些也适合我的需求.我应该选择哪一个?为什么?

现在整个事情刚刚开始,但到目前为止这里是要求:

  • 日志采用syslog格式
  • 查询主要是在一个现在在消息中的小字符串,但我会在一个单独的字段上得到它.并且还会有基于日期,严重程度或标记的过滤器.很少,人们会在消息中搜索随机字符串.
  • 来自某些日志条目的每小时分析
  • 将日志保留一段可配置的时间
  • 更多的将来,我敢肯定:)这就是为什么我认为NoSQL更合适,因为我们可以改变架构.

我们期望将数据库增长到一些TB数据(每秒约50K插入),因此必须进行分片.查询不常见,因为它们主要由较大项目的开发人员使用.但结果需要在几秒钟内返回.

现在,存储对于所有机器来说都是常见的(并且很慢).因此,对于可伸缩性,我认为我们需要充分利用内存和多线程 - 以便分片有意义.

到目前为止我所获得的基本思想是MongoDB具有更多功能,例如正则表达式或排序结果,并且更容易设置到合适的配置,而Cassandra似乎更具可扩展性(通过简单地添加服务器),并且还具有一些简洁的功能,比如把数据放在TTL上.

database logging mongodb cassandra

5
推荐指数
2
解决办法
2369
查看次数

System.IndexOutOfRangeException:索引超出数组的范围

我正在开发一个ATM软件作为家庭作业,在其中我想知道今天要处理的交易总额,为此,我编写了以下代码

 public decimal getDayTransaction(int accountid, string date, string transactiontype)
        {
            decimal totalamount = 0;
            int i = 0; 
            string connectionString = 
                     "Persist Security Info=False;User ID=sa; Password=123;Initial Catalog=ATMSoftware;Server=Bilal-PC";
            try
            {
                using (SqlConnection connection = 
                                 new SqlConnection(connectionString))
                {


                    SqlCommand command = new SqlCommand(
                         "Select Amount From [Transaction] where AccountID = "
                         + accountid + " AND CurrDate ='" + date
                         + "' AND TransactionType = '" 
                         + transactiontype + "';", connection);

                    connection.Open();
                    SqlDataReader dr = command.ExecuteReader();
                    while (dr.Read())
                    {
                        totalamount += Convert.ToDecimal(dr.GetString(i)); …
Run Code Online (Sandbox Code Playgroud)

c# database sql-server-2005 sql-server-2008

5
推荐指数
1
解决办法
4263
查看次数

在sqlite3中组合两个表

我在两个独立的sqlite3数据库中有两个表.数据类型相同,但模式略有不同.我希望它们是单个数据库中的单个表,具有相同的模式Table 2

表格1

CREATE TABLE temp_entries (
    id INTEGER PRIMARY KEY, 
    sensor NUMERIC, 
    temp NUMERIC, 
    date NUMERIC);
Run Code Online (Sandbox Code Playgroud)

表2

CREATE TABLE "restInterface_temp_entry" (
    "id" integer NOT NULL PRIMARY KEY,
    "dateTime" integer NOT NULL,
    "sensor" integer NOT NULL,
    "temp" integer NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

id两个表之间不是唯一的.我想创建另一个具有相同模式的表Table 2.我希望id表1中的条目从0开始,然后从table 2最后一个条目后的条目开始table 1.

理想情况下,我只想添加条目Table 1,Table 2并"重新索引"主键,使其与"dateTime"的升序相同.

更新:我现在有两个表使用相同的模式,我通过创建一个具有相同模式的新表来实现Table 2这一点Table 1.我将数据复制到新表中,例如:

INSERT INTO restInterface_temp_entry(id,dateTime,sensor,temp)
   ...> select id,date,sensor,temp FROM temp_entries;
Run Code Online (Sandbox Code Playgroud)

背景

我曾经把一堆记录 …

sql database sqlite

5
推荐指数
1
解决办法
1万
查看次数

我应该在它自己的EC2实例上运行MongoDB吗?

我刚刚开始使用Amazon EC2,并试图了解数据库应该如何工作.如果我有一个高流量站点并希望在多个实例上对流量进行负载均衡,那么我猜这些实例必须检索并将数据保存到单个单独的实例中,以避免数据在多台计算机上碎片化.

在这种情况下,我应该在自己的实例上安装和运行mongoDB,并让所有其他实例连接到这个单一数据存储吗?或者我应该在同一个实例上运行mongo和我的http服务器?

很想听听你的一些最佳实践.

database hosting amazon-ec2 mongodb cloud-hosting

5
推荐指数
1
解决办法
1156
查看次数

整数键/值可以存储在LevelDB中吗?

我搜索了支持整数键和整数值的键值存储.LevelDB似乎是一个不错的选择,但我找不到关于是否支持整数值/键的任何信息

database key-value leveldb

5
推荐指数
1
解决办法
4812
查看次数

如何在存储过程中使用模式创建新数据库?

我想编写一个TSQL存储过程,它创建一个具有指定名称的数据库,并使用一些模式预先填充它.

所以我使用了很多EXEC语句:

EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)');
Run Code Online (Sandbox Code Playgroud)

等等,与一些一起CREATE PROCEDURE,CREATE FUNCTION等等.然而,问题来自于当我想创建一个类型,CREATE TYPE语句中指定的数据库不能有,你不能USE @dbName在存储过程中.

如何在存储过程中的另一个数据库中创建类型?

t-sql database stored-procedures

5
推荐指数
2
解决办法
2279
查看次数

是否有一种优雅的方式来存储双重关系(即用户1和用户2是朋友)

我本月在两个不同的工作中遇到了同样的问题:

Version 1: User 1 & User 2 are friends
Version 2: Axis 1 & Axis 2 when graphed should have the quadrants colored...
Run Code Online (Sandbox Code Playgroud)

问题是,我没有看到使用RDBMS来存储和查询此信息的优雅方式.

有两种明显的方法:

方法1:

store the information twice (i.e. two db rows rows per relationship):
u1, u2, true 
u2, u1, true
u..n, u..i, true
u..i, u..n, true

have rules to always look for the inverse on updates: 
on read, no management needed
on create, create inverse
on delete, delete inverse
on update, update inverse

Advantage:    management logic …
Run Code Online (Sandbox Code Playgroud)

database database-design bit-manipulation bitmask social-networking

5
推荐指数
1
解决办法
382
查看次数

是否可以使用ADO.NET修改MS Access数据库架构?

我需要通过代码修改MS Acess数据库(.mdb)的模式.

由于Jet Engine DDL语句(ALTER TABLE等)的文档很少,我更喜欢使用某种对象库,如DAO(myDatabase.TableDefs("myTable").Fields.Append(myNewField))或ADOX(myCatalog.Tables("myTable").Columns.Append(myNewField))或SMO(仅适用于SQL Server,语法类似) - 你明白了.

是否有像ADOX.NET类似的东西,或者我是否坚持使用DDL语句或引用旧的DAO/ADOX库?

c# database ado.net ms-access dao

5
推荐指数
1
解决办法
2252
查看次数

数据库设计 - 系统默认项和自定义用户项

此问题适用于任何数据库表设计,您将拥有相同类型的系统默认项和自定义用户默认值(即用户可以添加自己的自定义项/设置).

以下是发票和付款方式的示例,默认情况下,发票可以包含DueOnReceipt,NET10,NET15,NET30的付款条件(这是所有用户的默认值!)因此您将有两个表"INVOICE"和"PAYMENT_TERM"

INVOICE
Id
...
PaymentTermId



PAYMENT_TERM (System default)
Id
Name
Run Code Online (Sandbox Code Playgroud)

现在,允许用户存储自己的自定义"PaymentTerms"的最佳方法是什么?为什么?(即用户可以使用系统默认付款条款或用户自己创建/添加的自定义付款条件)

选项1)将UserId添加到PaymentTerm,为添加了自定义项并将系统默认用户标识设置为null的用户设置userid.

INVOICE
Id
...
PaymentTermId



PaymentTerm
Id
Name
UserId (System Default, UserId=null)
Run Code Online (Sandbox Code Playgroud)

选项2)向Invoice"IsPaymentTermCustom"添加一个标志并创建一个自定义表"PAYMENT_TERM_CUSTOM"

INVOICE
Id
...
PaymentTermId
PaymentTermCustomId
IsPaymentTermCustom (True for custom, otherwise false for system default)

PaymentTerm
Id
Name

PAYMENT_TERM_CUSTOM
Id
Name
UserId
Run Code Online (Sandbox Code Playgroud)

现在通过SQL查询检查用户是否使用自定义付款条件,如果IsPaymentTermCustom = True,则表示用户使用自定义付款条件,否则为false.

选项3)????

...

database database-design

5
推荐指数
1
解决办法
752
查看次数

无法使用ON DELETE SET DEFAULT创建外键

我无法创建外键ON DELETE SET DEFAULT,但如果我使用,ON DELETE CASCADE那么这里的所有作品都是我的sql

CREATE TABLE person(  
    customer_id INT AUTO_INCREMENT PRIMARY KEY,  
    name VARCHAR(100) UNIQUE 
);


CREATE TABLE habits(  
    customer_id INT AUTO_INCREMENT PRIMARY KEY,  
    habit VARCHAR(100) UNIQUE 
);

INSERT INTO `test`.`habits` (`customer_id`, `habit`) VALUES (NULL, 'smoking'), (NULL, 'drinking');
INSERT INTO `test`.`person` (`customer_id`, `name`) VALUES (NULL, 'John'), (NULL, 'Steve');

CREATE TABLE foreigner(  
    customer_id INT AUTO_INCREMENT PRIMARY KEY,  
    customer VARCHAR(100) DEFAULT 'John', 
    habbit  VARCHAR(100) DEFAULT 'smoking', 
    FOREIGN KEY (customer) REFERENCES person(name)  ON DELETE SET DEFAULT ON …
Run Code Online (Sandbox Code Playgroud)

mysql sql database database-design

5
推荐指数
1
解决办法
6558
查看次数