小编Mar*_*row的帖子

存储时间序列数据,关系数据还是非数据?

我正在创建一个系统,使用SNMP以(可能)5分钟的间隔轮询设备以获取有关各种指标的数据,例如CPU利用率,磁盘利用率,温度等.最终目标是以时间序列图的形式为系统用户提供可视化.

我已经看过了,在过去使用的RRDTool,但拒绝了它作为存储捕获的数据无限地将我的项目很重要,我想更高层次和更灵活的访问捕获的数据.所以我的问题是:

什么是更好的关系数据库(如MySQL或PostgreSQL)或非关系数据库或NoSQL数据库(如MongoDB或Redis)在查询数据进行图形处理时的性能.

相关的

给定一个关系数据库,我将使用一个data_instances表,其中将存储为所有设备测量的每个度量捕获的每个数据实例,并包含以下字段:

领域: id fk_to_device fk_to_metric metric_value timestamp

当我想在特定设备上绘制特定指标的图形时,我必须查询此单个表,过滤掉其他设备,以及为此设备分析的其他指标:

SELECT metric_value, timestamp FROM data_instances
    WHERE fk_to_device=1 AND fk_to_metric=2
Run Code Online (Sandbox Code Playgroud)

此表中的行数为:

d * m_d * f * t
Run Code Online (Sandbox Code Playgroud)

其中d是的数量的装置,m_d是累计度量的数目被记录为所有设备,f频率在其中数据被轮询和t是总量时间系统已收集数据.

对于一年中每5分钟记录3个设备的10个度量标准的用户,我们将有不到500万条记录.

索引

没有索引fk_to_device并且fk_to_metric扫描这个不断扩展的表将花费太多时间.因此,索引上述字段以及timestamp(用于创建具有本地化期间的图表)是必需的.

非关系(NoSQL)

MongoDB具有集合的概念,与表不同,这些可以在没有设置的情况下以编程方式创建.有了这些,我可以为每个设备划分数据存储,甚至为每个设备记录每个指标.

我没有使用NoSQL的经验,也不知道它们是否提供任何查询性能增强功能,例如索引,但是前一段提出在数据存储在NoSQL下的结构中进行大多数传统的关系查询工作.

未定

具有正确索引的关系解决方案是否会在一年内减少爬行?或者NoSQL方法的基于集合的结构(与我存储的数据的心智模型相匹配)是否提供了明显的好处?

database time-series non-relational-database relational-database nosql

177
推荐指数
3
解决办法
6万
查看次数

在其元素更改优先级时更新Java PriorityQueue

我正在尝试使用a PriorityQueue来命令对象Comparator.

这可以很容易地实现,但是对象类变量(比较器计算优先级)可能在初始插入后发生变化.大多数人都提出了删除对象,更新值并再次重新插入的简单解决方案,因为这是优先级队列的比较器付诸行动的时候.

除了在PriorityQueue周围创建一个包装类之外,还有更好的方法吗?

java priority-queue

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

Python通过分配复制?

我希望下面的代码只会初始化dict_a,dict_b以及dict_c字典.但它接触到副本通过效果:

dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'

print dict_a
print dict_b
print dict_c
Run Code Online (Sandbox Code Playgroud)

如您所见,结果如下:

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
Run Code Online (Sandbox Code Playgroud)

为什么该程序会给出以前的结果,当我希望它返回时:

{}
{}
{'hello': 'goodbye'}
Run Code Online (Sandbox Code Playgroud)

python

43
推荐指数
2
解决办法
4万
查看次数

使用django:从"python manage.py shell"到python脚本

我可以移动到python项目目录(比如c:\ www\myproject),然后发出

   python manage.py shell
Run Code Online (Sandbox Code Playgroud)

然后我可以使用django项目中的所有模块,从shell命令中说出以下命令:

import settings 
from django.template import Template, Context

t=Template("My name is {myname}.")
c=Context({"myname":"John"})
f = open('write_test.txt', 'w')
f.write(t.render(c))
f.close
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试将所有命令收集到python脚本中时,说"mytest.py",我无法执行脚本.我必须错过重要的事情.

我发出了python mytest.py

然后我得到Import error: could not import settings它是在sys路径上吗?"

我在settings.py所在的项目目录中......

有人可以帮帮我吗?

谢谢.

python django

28
推荐指数
4
解决办法
4万
查看次数

什么是用于创建Python守护程序的事实库

我试图使用python-daemon库,在我看来这是创建守护进程而不忘记任何东西最安全的方法.文件很差,只是PEP 3143.

另一方面,我发现了许多链接到Sander Marechal的Python中一个简单的unix/linux守护进程.这看起来是一个更好的解决方案,或者我还没有尝试过使用它.

编辑:我使用过Sander Marechal的解决方案,它似乎很好用.


那么Python社区中创建一个守护进程的事实上的方法是什么呢,它是这些库中的一个,还是只是自己完成(分两次等)?

此外,您会认为任何带有PEP的库都是更好的选择,因为它比任何其他解决方案更接近创建守护进程(或至少更标准的方式)的综合方式.那么这个python-daemon包的处理是什么,它是否会包含在标准库中?

python daemon python-daemon

25
推荐指数
1
解决办法
5264
查看次数

generic.GenericForeignKey()字段可以为Null吗?

我正在创建一个对象,该对象跟踪有关创建,更新和删除UUIDSyncable数据库中其他所谓对象的更改(更新).

这涉及扩展UUIDSyncablesave()delete()方法的任何对象,以这种方式创建一个Update记录动作的新对象(插入,更新或删除),最初是一个models.CharField(max_length=64)指定对象的UUID pk的字段UUIDSyncable.

此时我想更新实现以使用Django的generic.GenericForeignKey()字段而不是我的单个字符字段.这将使得能够以更简单的方式访问正在记录更新的对象.

当您希望删除对象并将其存储为Update对象时,我的问题就出现了,因为您知道Django会对UUIDSyncable要删除的对象执行级联删除,删除所有以前的Update记录(不需要).

UUIDSyncable在我的原始实现中删除了该对象时,每个Update对象仍将保留UUID以通知外部各方其删除.我的第一个模拟这个的解决方案是content_object = None在删除所有对象上的Update对象之前设置,从而防止删除级联.

它的接缝generic.GenericForeignKey()无法设置为允许NULL值.有没有办法做到这一点,或者如果没有办法如何以类似的方式使用CharField持有UUID主键和CharField持有模型名称的sperate 的标准?

django django-models

22
推荐指数
2
解决办法
6867
查看次数

Django错误:为关键字参数获取了多个值

在使用构造函数overriden实例化Django表单时出现以下错误:

__init__() got multiple values for keyword argument 'collection_type'
Run Code Online (Sandbox Code Playgroud)

__init__()功能(下面示出)被完全按照写入这个但# code代替我的逻辑.请注意,我基本上重写了表单(这是一个ModelForm)构造函数.

def __init__(self, collection_type, user=None, parent=None, *args, **kwargs):
    # code
    super(self.__class__, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

创建错误的调用如下所示:

form = CreateCollectionForm(
    request.POST, 
    collection_type=collection_type, 
    parent=parent, 
    user=request.user
)
Run Code Online (Sandbox Code Playgroud)

我看不出错误弹出的原因.

编辑:这是构造函数的完整代码

def __init__(self, collection_type, user=None, parent=None, *args, **kwargs):
    self.collection_type = collection_type
    if self.collection_type == 'library':
        self.user = user
    elif self.collection_type == 'bookshelf' or self.collection_type == 'series':
        self.parent = parent
    else:
        raise AssertionError, 'collection_type must be "library", "bookshelf" or "series"'
    super(self.__class__, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

编辑:Stacktrace …

django django-forms

21
推荐指数
3
解决办法
3万
查看次数

带有文字x轴的graphael条形图

我想知道如何制作一个简单的条形图,可能有一天作为x轴,值为'今天'和'昨天',而y轴可能是'时间',相应的值为'1'和'2 ".我想我很困惑,如何设置文本为x轴的值,如何显示Y轴,究竟rgaxis呢...(我发现使用一个例子axis = r.g.axis(0,300,400,0,500,8,2),我只知道这是xpos,ypos,width,??,?? num ticks,??).任何见解都会很棒!或者包含功能更全面的条形图示例(标签等)的页面.谢谢.

raphael graphael

14
推荐指数
4
解决办法
2万
查看次数

Django芹菜任务:新创建的模型DoesNotExist

为什么我创建的模型实例,从后来直接启动的芹菜任务中查询,未找到?例如:

# app.views

model = Model.objects.create()    # I create my lovely model in a view
from app.tasks import ModelTask   # I import my Async celery task
ModelTask.delay(model.pk)         # I start the task
Run Code Online (Sandbox Code Playgroud)

这一切看起来都很好,当然如果我在create()调用后的任何时候查询模型应该存在于数据库中.

更新1:我正在使用transaction.autocommitDjango为我的视图提供的默认行为.

但是下面的任务抛出ObjectDoesNotExist异常:

# app.tasks

class ModelTask(Task):
    def run(self, model_pk):
        from app.models import Model
        Model.objects.get(pk=model_pk)
Run Code Online (Sandbox Code Playgroud)

在我的测试中,正如预期的那样,model_pk是一个正确的正整数ID.

结论

我认为有一些异步/"分开处理"在这里出现的问题,但我不知道它是什么.如果觉得我有一些明显的错误.

我不认为数据库事务是答案,因为Django的默认"自动提交"方法确保在create()调用方法后立即执行数据库操作.

django asynchronous celery django-celery

13
推荐指数
2
解决办法
1722
查看次数

证明f(f bool)= bool

我怎么能在coq中证明一个函数f接受bool true|false并返回一个bool true|false(如下所示),当对一个bool应用两次时true|false总会返回相同的值true|false:

(f:bool -> bool)
Run Code Online (Sandbox Code Playgroud)

例如函数f只能做4件事,让我们调用函数的输入b:

  • 永远回来 true
  • 永远回来 false
  • 返回b(即如果b为真则返回true,反之亦然)
  • 返回not b(即如果b为真,则返回false,副)

因此,如果函数始终返回true:

f (f bool) = f true = true
Run Code Online (Sandbox Code Playgroud)

如果函数总是返回false,我们会得到:

f (f bool) = f false = false
Run Code Online (Sandbox Code Playgroud)

对于其他情况,让我们假设函数返回 not b

f (f true) = f false = true
f (f false) = f true = false
Run Code Online (Sandbox Code Playgroud)

在两种可能的输入情况下,我们总是最终得到原始输入.如果我们假设函数返回,则同样成立b.

那么你如何在coq中证明这一点?

Goal forall (f:bool -> bool) (b:bool), f (f b) …
Run Code Online (Sandbox Code Playgroud)

coq

11
推荐指数
1
解决办法
1130
查看次数