【问题标题】:How can i store object in MySql Database?如何在 MySql 数据库中存储对象?
【发布时间】:2017-03-29 13:16:21
【问题描述】:

我可以在 MySql 数据库中存储一些对象吗?因为我是用MySql做一个线上或者线下的支持系统。因此,将所有数据存储为 Object 很重要。除了 Object,你还有更好的 Idea 吗?

这是关于对象的Damo示例

$data = array(
                'user_id' => 1, //$userId,
                'payment_id' => $payment_id,
                'hash' => $hash,
                'conversation' => $object,
                'amount' => $paypal->getTransactions()[0]->getAmount()->getTotal(),
                'description' => $paypal->getTransactions()[0]->getDescription()
            );
$this->db->insert($this->table, $data);

【问题讨论】:

  • 你想要什么。您的表中有多少列?
  • 您必须拥有数据库中的每个键,然后根据该键插入。像"INSERT INTO something (someKey1,someKey2) VALUES ('{$somevalue->someKey1}', '{$somevalue->someKey2}');" 这样的查询对象将具有与键匹配的属性。
  • 无论如何你都可以在插入之前序列化这些对象
  • @AlexSlipknot 你可以序列化它——但我不会;它打破了规范化规则并将数据与应用程序联系起来;序列化的 PHP 数据对于读取数据库的其他任何内容都毫无用处。简而言之 - 这通常是一个糟糕的主意。
  • @CD001 好吧,如果对象很简单,你可以。如果没有 - 您可以使用 __sleep 实现自己的序列化

标签: php mysql codeigniter


【解决方案1】:

您必须将对象转换为字符串以保存完整对象。 为此,请在 PHP 中使用 serialize

http://php.net/manual/en/language.oop5.serialization.php

然后您将能够反序列化并取回您的对象。

【讨论】:

  • 一般来说,这是一个的想法。
  • 你能解释一下原因吗?
  • 假设您想从数据库中获取具有“x”属性的对象 - 您必须提取所有数据并取消序列化对象以确定哪个对象具有该属性;您的数据根本不再标准化。您应该有映射对象属性的索引列,然后您可以检索特定数据,或在将来轻松更新特定属性。此外,如果您将应用程序移植到 Ruby 或其他什么,序列化的 PHP 数据可能毫无用处。
  • 在某些情况下,序列化可能很有用,当它是数据时,您永远不会排序,只是一组数据。但是如果你需要选择具体的条目,你确实不应该使用它!
  • 创建一个表“对话”,一个条目=一个消息。创建您的列,例如“用户名、ID、消息、IP、...”。
【解决方案2】:

MySql 在 MySql 5.7 中添加了许多功能。现在您可以通过多种方式做到这一点。

Oracle 和大数据一样现在正在集成到 MySQL 中。

MySql 通过 MySQL 和 Hadoop 解锁了新的大数据洞察力。

解决方案 1: 您可以将 MySQL 用作文档存储。可以将许多对象存储为 JSON。强烈推荐它并且可扩展。

MySQL 文档存储 = (MySql + NoSql)。

X Dev API 将有助于通过 X 上的 SQL 和 CRUD 操作生成 JSON 协议。也有可能维护X Session。

最适合聊天应用或群组应用的透明数据发送和共享。

解决方案 2: MySql Sysbench: Read Only 是另一个很好的解决方案。制作群聊应用程序将非常非常快速和可扩展。

解决方案 3: 使用MySql 5.7 : InnoDB, NoSql with Memcached API,它将直接与存储引擎 InnoDB 交互。它比 MySql 5.6 快 6 倍。

目前,FaceBook 正在使用这项技术。因为它非常快。

更多详情:

https://www.mysql.com/news-and-events/web-seminars/introducing-mysql-document-store/

https://dev.mysql.com/doc/refman/5.7/en/document-store-setting-up.html

https://www.oracle.com/big-data/index.html

https://www.youtube.com/watch?v=1Dk517M-_7o

【讨论】:

  • 解决方案 1 将是最好的。 dev.mysql.com/doc/refman/5.7/en/document-store.html
  • 我刚刚找到了这篇文章,因为我正在寻找有关 MySQL 中 JSON 存储的资料。优点之一是您可以使用虚拟列对 JSON 中包含的数据进行索引。这比序列化要好得多。序列化不应用于将数据转换为可存储格式。
猜你喜欢
  • 2019-09-15
  • 2016-09-01
  • 2022-11-17
  • 2013-06-30
  • 2011-02-14
  • 1970-01-01
  • 2018-03-12
  • 2010-10-15
  • 2021-12-11
相关资源
最近更新 更多